你可以把取出的数先排序,比如2 4 7 9,然后把2对应1代入,4对应2人入
7对应3 ,9对应4代入你上面举的那个例子的序列。因为只要顺序是对的都是一样的吗?然后你可以用一个这样函数比如:
setNo1(iNew:integer);这一个函数把所有你上面的例子中为1的值改为你传入的值。如
setNo1I7)则会为;0000  7000 0200 0030 0004 7200
然后你再写出setno2 setno3 setno4不过这是一种投机方法,如果你的程序
要求可以不只要取4个可能还会有5个6个的那就要再分析 了
我的算法没有过关,请大家不要见笑!

解决方案 »

  1.   

    我不明白你究竟想做什么,在你的例子中实际好象是0、1、2、3、4的排列组合,真不明白干吗要空位用0补齐。这就像我写的一个密码生成程序,比如用1,2,3,4生成所有的4位的密码,设置两个数组一个为INTEGER,一个为CHAR,第一个用来计数,另一个存放密码的每一位,生成一个后打印。一个一个生成就行了,这么说我也说不太清楚。另一种简单一点的方法是用连表保存每一位,但是运行时太耗内存了,我的程序一开始用这种方法,192兆给耗的干干净净,如果你用的是服务器,可以试一下。
      

  2.   

    我想问的是:
       1、2、3、4、5、6、7、8、9、、、、N 这些数字组合(不是排列),用数组A来表示这些组合的所有方式,如:第一个组合为:1234,那么A[1,1]=1,A[1,2]=2,A[1,3]=3,A[1,4]=4;我想把所有的组合,打印到窗体上,现在我想知道这种算法?
      

  3.   

    c(0,4):   0
    c(1,4):   1,2,3,4
    c(2,4):   12,13,14,23,24,34
    c(3,4):   123,124,134,234
    c(4,4):   1234
    共有:  c(0,4)+c(1,4)+c(2,4)+c(3,4)+c(4,4)=2^4=16
    所有这个程序分解为求: c(m,n)
    我有这个程序,不过是用C++BUILDER的编的
      

  4.   

    我觉得你的意思不太明确?你说的是组合?如果是组合的话,那么你的a[1,2]可以是不确定的啊?你说是不是,比如如BCB所说的:
    c(4,4):1234,那么1243 4321 3124都应该是符合要求的啦 ?
      

  5.   

    给一个控制台的程序给你,
    program Project2;{$APPTYPE CONSOLE}uses
      SysUtils;const m=5;n=4; //从M个元素中取N个的所有组合
    var
      i,j,k:integer;
      b:array [0..n] of integer;
    begin
      k:=0;
      for i:=1 to n do b[i]:=i;
      b[0]:=-1;
      while b[0]<0 do
        begin
          j:=n;
          inc(k);
          while b[j]=m-n+j do j:=j-1;
          b[j]:=b[j]+1;
          for i:=j+1 to n do b[i]:=b[i-1]+1;
          for i:=1 to n do write('':10,b[i]:5); //输出一个组合
          writeln;
        end;
      writeln('      Total=',k); //组合的总个数 
    readln;
    end.