不是VIP会员,不能显示答案

题目解答

题目:
[问题描述] 用生成法求出1,2,…,r的全排列(r<=8)(15分)(每个点3分)
[算法过程] 用数组: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 a[i]:=i  ;
 print1;
 s:=1;
 for i:=2 to r do s:=s*i;
 s:=s-1;
 for i:= 1 to s do 
begin 
j:=r;
while a[j-1]>a[j] do j:=j-1;
k:=j;
 for i1:=j+1 to r do 
 if (a[i1]>a[j-1]) and (a[i1]<a[k]) 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  a[i1]>a[k]  then
 begin
t:=a[i1];a[i1]:=a[k];a[k]:=t;
 end;
 print1;
     end;
  end. 
考点:
分析:
解答:
评论:
老师: