[算法过程] 用数组:a:array[1..r]of integer ;表示排列;
初始化时,a[i]:=1(i=1,2,….f)
设中间的某一个排列为a[1],a[2],…a[r]
则求出下一个排列的算法为:
(1) 从后面向前找,直到找到一个顺序为止(设下标为j-1,则a[j-1]<a[j]
(2) 从a[j]- a[r]中,找出一个a[k]比a[j-1]大的最小元素
(3) 将a[j-1]与a[K]交换
(4) 将a[j],a[j+1]……a[r]由小到大排序。
[程序清单]
program exgp4; const r=7; var n,i,s,k,j,i1,t:intger; a:array[1..r]of integer; procedure print1; var ik:integer; begin for ik:=1 to r do write(a[ik]:8);writeln; end begin for i:=1 to r do __________1__________; print1; s:=1; for i:=2 to r do s:=s*i; s:=s-1; for i:=__________2__________do begin j:=r; while__________3_________do j:=j-1; k:=j; for i1:=j+1 to r do if __________4_________then k:=i1; t:=a[j-1];a[j-1]:=a[k];a[k]:=t; for i1:=j to r-1 do for k:=i1+1 to r do if __________5___________then begin t:=a[i1];a[i1]:=a[k];a[k]:=t; end; print1; end; end.