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
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.