P146SUMF spoj PTIT – Dãy số kì diệu
Nguồn đề bài: http://www.spoj.com/PTIT/problems/P146SUMF/ 1. Đề bài P146SUMF spoj Cho trước một số nguyên không âm n, nhiệm vụ của bạn là tìm số nguyên k nhỏ nhất, sao cho dãy số n, 2n, 3n, …, kn có chứa đầy đủ các chữ số từ 0 đến 9. Input Gồm nhiều bộ test. Mỗi test ...
Nguồn đề bài: http://www.spoj.com/PTIT/problems/P146SUMF/
1. Đề bài P146SUMF spoj
Cho trước một số nguyên không âm n, nhiệm vụ của bạn là tìm số nguyên k nhỏ nhất, sao cho dãy số n, 2n, 3n, …, kn có chứa đầy đủ các chữ số từ 0 đến 9.
Input
Gồm nhiều bộ test. Mỗi test gồm một số nguyên dương n trong phạm vi từ 1 tới 200 000 000.
Output
Với mỗi test, in ra trên một dòng số nguyên k thỏa mãn yêu cầu.
Example
Input:
1
10
123456789
3141592
Output:
10
9
3
5
2. Hướng dẫn P146SUMF spoj PTIT
– thực hiện sinh xâu k*n (k=1..+oo)
– duyệt kiểm tra có thỏa điều kiện đề bài hay không? nếu có thì xong bài toán. còn ko tiếp tục tăng k và kiểm tra
3. code tham khảo P146SUMF spoj PTIT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | const fi='; type data=longint; var f:text; N:data; DD:array[0..9] of boolean; sl:data; function check:boolean; begin exit(sl=10); end; procedure xuli; var i,j:data; tmp:string; begin fillchar(dd,sizeof(dd),false); sl:=0; for i:=1 to 200000000 do begin str(int64(i)*int64(n),tmp); for j:=1 to length(tmp) do if dd[ord(tmp[j])-48]=false then begin dd[ord(tmp[j])-48]:=true; inc(sl); if check then break; end; if check then break; end; writeln(i); end; begin assign(f,fi); reset(f); while not seekeof(f) do begin readln(f,n); xuli; end; close(f); end. |