HSPC14L spoj – Bất lặp
Nguồn đề bài: http://vn.spoj.com/problems/HSPC14L/ 1. Đề bài HSPC14L spoj Số bất lặp là số mà trong đó mỗi chữ số {1,2,3, …, 9} xuất hiện tối đa một lần và không có số 0. Một số bất lặp có thể có nhiều nhất chín chữ số, nhưng cũng có thể có ít hơn. Ví dụ về số bất lặp: 9, ...
Nguồn đề bài: http://vn.spoj.com/problems/HSPC14L/
1. Đề bài HSPC14L spoj
Số bất lặp là số mà trong đó mỗi chữ số {1,2,3, …, 9} xuất hiện tối đa một lần và không có số 0. Một số bất lặp có thể có nhiều nhất chín chữ số, nhưng cũng có thể có ít hơn. Ví dụ về số bất lặp: 9, 32, 489, 98761 và 983245.
Bạn có một số nguyên N có tối đa 9 chữ số. Nhiệm vụ của bạn là in ra số bất lặp nhỏ nhất lớn hơn N. Ví dụ, đối với 99 thì câu trả lời là 123, đối với 881 thì câu trả lời là 891, và đối với 133 thì câu trả lời là 134.
Input
Gồm nhiều test, mỗi test ghi trên một dòng gồm số nguyên N.
Output
Với mỗi test, in ra số cần tìm. Nếu không có, in ra 0.
Example
Input:
99
Output:
123
2. code tham khảo HSPC14L spoj
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | const fi='; type data=longint; var dd:array[1..9] of boolean; kq:array[1..9] of data; n,k:data; f:text; s,stam:string; OK:boolean; procedure try(i:data); var j:data; begin if i>n then begin if (s<stam) then begin ok:=false; writeln(stam); end; end else for j:=1 to 9 do if (not dd[j]) and OK then begin dd[j]:=true; stam:=stam+chr(j+48); try(i+1); delete(stam,length(stam),1); dd[j]:=false; end end; procedure xuli(z:data); begin ok:=true; str(k,s); fillchar(dd,sizeof(dd),false); stam:='; n:=z; while length(s)<n do s:='0'+s; try(1); end; begin assign(f,fi); reset(f); while not eof(f) do begin readln(f,k); case k of 0.. 9: xuli(1); 10.. 98: xuli(2); 99.. 987: xuli(3); 988.. 9876: xuli(4); 9877.. 98765: xuli(5); 98766.. 987654: xuli(6); 987655.. 9876543: xuli(7); 9876544.. 98765432: xuli(8); 98765433.. 987654320: xuli(9); else writeln(0); end; end; close(f); end. |