9.29.2017

Liệt kê các hoán vị

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