Bài 2: Đội hình thi đấu điền kinh.
Giải thi đấu điền kinh được tổ chức tại một sân vận động có N đường đua. Mỗi lượt thi đấu có N vận động viên có số áo khác nhau tham gia trên mỗi đường đua khác nhau.
Hãy nêu các cách sắp xếp và số lượng các cách sắp xếp các vận động viên tham gia thi đấu trong mỗi lượt đua.
Dữ liệu vào là tệp văn bản DIENKINH.INP có cấu trúc:
– Dòng đầu tiên ghi số N (2<=N<=7)
- Dòng tiếp theo ghi N số là số áo của các vận động viên tham gia thi đấu trong 1 lượt đua nào đó, các số ghi cách nhau ít nhất là một kí tự trống. Số áo của mỗi vận động viên là 1 số không quá 3 chữ số.
Dữ liệu ra là tệp văn bản DIENKINH.OUT liệt kê các cách sắp xếp các vận động viên tham gia lượt thi đấu đã nêu ở tệp dữ liệu vào. Mỗi cách sắp xếp ghi trên 1 dòng gồm N số áo của các vận động viên, các số ghi cách nhau ít nhất là 1 kí tự trống. Dòng cuối cùng của tệp ghi số lượng các cách sắp xếp.
Ví dụ:
Tệp DIENKINH.INP Tệp DIENKINH.OUT
3
5 10 4 5 10 4
5 4 10
10 5 4
10 4 5
4 5 10
4 10 5
6
uses crt;
var f:text; i,n:longint; a,b:array[1..10000000]of longint;
procedure print;
var i,d,j,kt:longint;
begin
d:=0;
for i:=1 to n do
begin
kt:=0;
for j:=1 to i-1 do if b[i]=b[j] then kt:=1;
if kt=0 then inc(d);
end;
if d=n then
begin
for i:=1 to n do write(f,a[b[i]],’ ‘);
writeln(f);
end;
end;
function dequy(a:longint):longint;
var i:longint;
begin
if a=n+1 then print else
for i:=1 to n Do
begin
b[a]:=i;
dequy(a+1);
end;
end;
begin
clrscr;
assign(f,’DIENKINH.INP‘);reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
close(f);
assign(f,’DIENKINH.OUT‘);rewrite(f);
dequy(1);
close(f);
end.
var
a,k:array[0..7] of word;
duyet:array[0..7] of boolean;
i,n:byte;
dem:word;
f:text;
const fi=’DIENKINH.INP’;
fo=’DIENKINH.OUT’;
procedure xuat;
var ii:byte;
begin
for ii:=1 to n do write(f,k[ii],’ ‘);writeln(f);inc(dem);
end;
procedure hoanvi(i:byte);
var j:byte;
begin
if i<=n then
for j:=1 to n do
begin
if duyet[j]=true then
begin
k[i]:=a[j];
duyet[j]:=false;
hoanvi(i+1);
duyet[j]:=true;
end;
end
else xuat;
end;
begin
assign(f,fi);reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
close(f);
assign(f,fo);rewrite(f);
fillchar(duyet,sizeof(duyet),true);
hoanvi(1);
writeln(f,dem);
close(f);
end.