Trang chủ Tin Học Lớp 9 SỐ THỨ K (30 ĐIỂM) Cho dãy A gồm các...

SỐ THỨ K (30 ĐIỂM) Cho dãy A gồm các số nguyên dương tăng dần chia hết cho ít nhất một trong ba số 3, 5 và 7. Như vậy ta có dãy A = (3, 5. 6, 7 10, 12, 14.

Câu hỏi :

giúp hộ với ạ.cần gấp trong sáng nay ạ.cảm ơn

image

Lời giải 1 :

uses crt;
var d,f:text; i,k,n:qword; j:longint;
begin
clrscr;
   assign(d,'input.pas');reset(d);
   assign(f,'output.pas');rewrite(f);
      for j:=1 to 7 do
         begin
            readln(d,k); i:=0; n:=0;
            repeat
               i:=i+1;
               if (i mod 3=0)or(i mod 5=0)or(i mod 7=0) then n:=n+1;
            until n=k;
            writeln(f,i);
         end;
   close(f);
   close(d);
end.

Xin lỗi mình chỉ làm đến dòng thứ 7.

Thảo luận

Lời giải 2 :

Ban đầu bạn cần có kiến thức cơ bản về quy hoạch động. Và ý tưởng của mình là như thế này:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int n;
ll f[20][4][6][8], sum = 0, K, limit = 0;

ll trau(int pos, int mod3, int mod5, int mod7) /// Quy hoạch động chữ số
{
    if(pos > n) return (!mod3 || !mod5 || !mod7); /// Nếu 1 trong 3 đk thỏa mãn, trả về 1

    ll &res = f[pos][mod3][mod5][mod7];
    if(res != -1) return res;
    res = 0;

    int MIN = 0;
    if(pos == 1) MIN = 1; /// Không có số '0' vô nghĩa

    for(int i = MIN; i <= 9; i++)
    {
        res += trau(pos + 1, (mod3 * 10 + i) % 3, (mod5 * 10 + i) % 5, (mod7 * 10 + i) % 7);
    }

    return res;
}

void trace(int pos, int mod3, int mod5, int mod7, ll k) /// Tìm kq bằng quy hoạch dộng vị trí cấu hình
{
    if(pos > n) return;

    int MIN = 0;
    if(pos == 1) MIN = 1;

    for(int i = MIN; i <= 9; i++)
    {
        if(k > trau(pos + 1, (mod3 * 10 + i) % 3, (mod5 * 10 + i) % 5, (mod7 * 10 + i) % 7))
        {
            k -= trau(pos + 1, (mod3 * 10 + i) % 3, (mod5 * 10 + i) % 5, (mod7 * 10 + i) % 7);
        }
        else
        {
            cout << i;
            trace(pos + 1, (mod3 * 10 + i) % 3, (mod5 * 10 + i) % 5, (mod7 * 10 + i) % 7, k);
            return;
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> K;

    do /// Tìm số kết quả có độ dài là bao nhiêu
    {
        K -= limit;
        memset(f, 255, sizeof(f));

        n++;

        limit = trau(1, 0, 0, 0);

    }
    while(limit < K);

    trace(1, 0, 0, 0, K);

    return 0;
}

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, sắp phải bước vào một kì thi căng thẳng và sắp chia tay bạn bè, thầy cô và cả kì vọng của phụ huynh ngày càng lớn mang tên "Lên cấp 3". Thật là áp lực nhưng các em hãy cứ tự tin vào bản thân là sẻ vượt qua nhé!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247