生成1..n的全排列
program fullpermutation;
var
n:integer;
a:array[1..20] of integer;
used:array[1..20] of boolean;
procedure search(k:integer);
var
i:integer;
begin
if k>n then
begin
for i:=1 to n do
write(a[i],' ');
writeln;
end
else
begin
for i:=1 to n do
if not used[i] then
begin
used[i]:=true;
a[k]:=i;
search(k+1);
used[i]:=false;
end;
end;
end;
begin
read(n);
fillchar(used,sizeof(used),false);
search(1);
end.
生成1..n的r个数的组合
program combination;
var
n,r:integer;
a:array[0..20] of integer;
procedure search(k:integer);
var
i:integer;
begin
if k>r then
begin
for i:=1 to r do
write(a[i],' ');
writeln;
end
else
for i:=1 to n do
{a[k]>a[k-1]且a[k]-(k-1)<=n-(r-2)}
if (i>a[k-1]) and (i-(k-1)<=n-(r-2)) then
begin
a[k]:=i;
search(k+1);
end;
end;
begin
read(n,r);
a[0]:=0;
search(1);
end.