我老了,变笨了
请教一下:
有a,b,c,d四个变量
我想罗列出所有的排列的可能性怎么做?
1、如果只有思路也请提点一下
2、我会尽力在各位想出前,解决

解决方案 »

  1.   

    A、B、C、D
    -> A、(B、C、D) = [A、(BCD)] 和 [(BCD)、A]
    -> BCD = [B(CD)]、[(CD)、B]
    -> CD = [CD]、[DC]原型是:两个变量 X、Y 的排列只有 XY 和 YX。即:N个变量(X1, X2, ..., XN)的排列,等价于
        X1(X2..XN的排列)和(X2..XN的排列)X1。
    如此递归到原型即可。
      

  2.   

    我用了一种很笨的方法,出来了————
    var
    i,j,k:integer;
    a,b,c,d,t1,t2,t3 :string;
    begin
     a:='a';
     b:='b';
     c:='c';
     d:='d';
    for k:=0 to 1 do 
    begin
        t1:=c;
        c:=d;
        d:=t1;
        for j:=0 to 2 do
        begin
           t1:=b;
           b:=c;
           c:=d;
           d:=t1;
           for i:=0 to 3 do
           begin
              t1:=a;
              a:=b;
              b:=c;
              c:=d;
              d:=t1;
              ShowMessage(a+b+c+d);
           end;
        end;
    end;end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        ss:array[1..4] of string;
        i,j,k,n: integer;
    begin
        ss[1]:='a';
        ss[2]:='b';
        ss[3]:='c';
        ss[4]:='d';
        for i:=1 to 4 do
        begin
            for j:=1 to 4 do
            begin
                for k:=1 to 4 do
                begin
                    for n:=1 to 4 do
                    begin
                        if (j<>i) and (k<>i) and (n<>i) and (k<>j) and (n<>j) and (n<>k) then
                        memo1.Lines.Add(ss[i]+ss[j]+ss[k]+ss[n]);
                    end;
                end;
            end;
        end;
    end;
    算法比较笨,不知到行不行,如果排列的在多些的话,这个可能不是很好用。运行结果:
    abcd
    abdc
    acbd
    acdb
    adbc
    adcb
    bacd
    badc
    bcad
    bcda
    bdac
    bdca
    cabd
    cadb
    cbad
    cbda
    cdab
    cdba
    dabc
    dacb
    dbac
    dbca
    dcab
    dcba
      

  4.   

    就是不学计算机,搞编程也应该知道,这样的穷举排序一般用回溯啊!
    找本数据结构或高程的书看看吧!34个数的排例用jshnet(泰山)的办法好了!