首页 > 试题广场 >

[问题描述] 用生成法求出1,2,…,r的全排列(r=8)

[填空题]
[问题描述] 用生成法求出1,2,…,r的全排列(r<=8)
[算法过程] 用数组: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.

这道题你会答吗?花几分钟告诉大家答案吧!