设有N 个自然数系列:1,2,... ,n
请编程求所有可能的包含所有系列数的组合.并保存到一个二维数组中.例如 N=5时,共有 N!=5!=5*4*3*2*1=120 种组合,数组则定义为 Arr(120,5):组合"12345"
Arr(1,1)=1 Arr(1,2)=2 Arr(1,3)=3 Arr(1,4)=4 Arr(1,5)=5组合"54321"
Arr(1,1)=5 Arr(1,2)=4 Arr(1,3)=3 Arr(1,4)=2 Arr(1,5)=1以及组合"13254",等等!

解决方案 »

  1.   

    program kkk;
    const nn=20;
    type row=array [1..20] of integer;
    var p: row;
        n,i: integer;
        num:longint;
    procedure wrtperm(n:integer; var s:row);
    var i:integer;
    begin
     for i:=1 to n do write(s[i]:3);
     writeln;
    end;
    procedure perm(n:integer; var p:row; var i:integer);
    var j,j1,j2,t,m:integer;
    begin
      i:=n;
      repeat  i:=i-1  until (p[i]<p[i+1]) or (i<1);
      if i>0 then
        begin
          j:=i+1;
          for t:=i+1 to n do
          if p[i]<p[t] then j:=t;
          m:=p[i]; p[i]:=p[j]; p[j]:=m;
          t:=(n-i) div 2;
          for j:=1 to t do
            begin
              j1:=i+j; j2:=n-j+1;
              m:=p[j1]; p[j1]:=p[j2]; p[j2]:=m;
            end;
        end;
    end;
    begin {main}
      writeln('input N:(<=20)'); readln(n);
      num:=1;
      for i:=1 to n do p[i]:=i;
      i:=1;
      while i>0 do
        begin
          wrtperm(n,p);
          perm(n,p,i);
          if i>0 then num:=num+1;
        end;
      writeln('num=',num);
    end.
    对不起,我只会pascal,这是全排列部分,全部程序没完成
      

  2.   

    以字典序写啊
    例如,n=6
    00000
    00001
    00010
    00011
    00100
    00101
    ...
    ...
    ...
    11111
    n=k类推
      

  3.   

    Sub numList(n As Integer)
        Dim r() As Integer                '用于存放序列表
        Dim f() As Boolean                '用于标志
        Dim i As Integer
        Dim p As Integer
        
        ReDim r(n)
        ReDim f(n)
        i = 1
        
        Do
            r(i) = r(i) + 1
            If r(i) > n Then
               i = i - 1
               f(r(i)) = False
            ElseIf Not f(r(i)) Then
                If i < n Then
                   f(r(i)) = True
                   i = i + 1
                   r(i) = 0
                Else
                    For p = 1 To n
                        Debug.Print r(p);
                    Next
                    Debug.Print
                End If
            End If
        Loop Until i = 0
    End Sub