BCTEST11 spoj PTIT – Số chia may mắn

Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCTEST11/

1. Đề bài BCTEST11 spoj PTIT

Bờm rất yêu thích các số may mắn. Ta biết rằng một số gọi là số may mắn nếu biểu diễn thập phân của nó chỉ chứa các chữ số may mắn là 4 và 7. Ví dụ: Các số 47,744,4 là số may mắn còn 5,17,467 không phải là số may mắn.

Từ định nghĩa trên, Bờm định nghĩa ra khái niệm số chia may mắn. Một số là số chia may mắn nếu nó chia hết cho ít nhất một số may mắn. Ví dụ: 8,14,.. Bạn hãy giúp Bờm xác định xem số N có phải là số chia may mắn hay không?

Dữ liệu:

Một số nguyên duy nhất N (1≤N≤1000).                                                  .

Kết quả:

In ra “YES” nếu N là số chia may mắn, hoặc “NO” nếu ngược lại.

Ví dụ:

INPUTOUTPUT
47YES
INPUTOUTPUT
16YES
INPUTOUTPUT
78NO

2. Hướng dẫn BCTEST11 spoj PTIT

Bạn chỉ cần liệt kê hết tất cả số may mắn từ [1->1000] sau đó thực hiện kiểm tra bình thường là dc. 😀 bạn có thể tính ở ngoài rồi dùng mảng hằng để vào là được.

3. Code tham khảo BCTEST11

const   fi='';
        nmax=1000;
        A:array[1..14] of word=(4, 7, 44, 47, 74, 77, 444, 447, 474, 477, 744, 747, 774, 777);
type    data=longint;
var
        f:text;
        N,i:data;

begin
        assign(f,fi); reset(f);
        readln(f,n);
        close(f);
        for i:=1 to 14 do
                if n mod a[i]= 0 then
                        begin
                                writeln('YES');
                                halt;
                        end;
        writeln('NO');
end.

One thought on “BCTEST11 spoj PTIT – Số chia may mắn

  1. cảm ơn ad đã đăng.
    Nhưng nếu 1 < N << 10^18(unsigned long long in c/c++) thì liệt kê như thế không ổn.
    add có cách nào tổng quát hơn không?

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *