Lập trình nhập một số tự nhiên từ bàn phím, in ra tất cả các hoán vị từ 1 đến số đó. Ví dụ nhập vào số 3 thì các hoán vị cần in ra là: 123, 132, 213, 231, 312, 321.
Giải
var
i,n,k,tg,m,g: Integer; a: array[1..500] of integer;
Procedure doi(var x,y:integer);
Begin tg:=x; x:=y; y:=tg; End;
BEGIN
Write('Nhap n: '); Readln(n);
For i:=1 to n do a[i]:=i;
Repeat
For i:=1 to n do write(a[i]);
Writeln; i:=n-1;
While (i>0) and (a[i]>a[i+1]) do dec(i);
If i > 0 Then
Begin
k:=n;
while (a[i]>a[k]) do dec(k);
doi(a[i],a[k]); m:=i+1; g:=n;
while m<g do
begin doi(a[m],a[g]); inc(m); dec(g); end;
End;
Until i=0;
Readln;
END.
No comments:
Post a Comment
Cảm ơn bạn đã nhận xét