所有阵列的可能性

时间:2010-01-16 23:02:16

标签: php delphi loops pascal

我有pascal代码(编程语言实际上没有任何意义):

  

方框[1]:= 14;
方框[2]:= 2;
  方框[3]:= 4;
方框[4]:= 5;
  方框[5]:= 6;
方框[6]:= 8;

我希望得到所有可能性。例如,方框[1] =方框[6],然后方框[6] =方框[1]。是的,我可以用手写,但我想我可以通过循环让它变得更聪明。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我采用了我在维基百科中找到的第一个排列算法,并在Delphi(2009)中实现了它;我希望这就是你要找的东西:

type
  TIntegerArray = array of Integer;

procedure Permutation(K: Integer; var A: TIntegerArray);
var
  I, J: Integer;
  Tmp: Integer;

begin
  for I:= 2 to Length(A) do begin
    J:= K mod I;
    Tmp:= A[J];
    A[J]:= A[I - 1];
    A[I - 1]:= Tmp;
    K:= K div I;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  K, I: Integer;
  A: TIntegerArray;
  S: string;

begin
  Memo1.Lines.Clear;
  for K:= 0 to 719 do begin
    A:= TIntegerArray.Create(14, 2, 4, 5, 6, 8);
    Permutation(K, A);
    S:= '';
    for I:= 0 to Length(A) - 1 do
      S:= S + Format('%3.d ', [A[I]]);
    Memo1.Lines.Add(S);
  end;
end;

答案 1 :(得分:0)

I've answered you已经? = S

答案 2 :(得分:0)

所以基本上,你有一组可以包括(1)或排除(0)的项目。如果从0到2 ^(项数)-1计数,则每个整数都是一组位,表示包含哪些项。

如果您有7个项目,则在0到127的循环中,所选项目为:

x0000000 (loop variable = 0, no items are chosen)
x0000001 (loop variable = 1, item [1] is chosen)
x0000010 (loop variable = 2, item [2] is chosen)
x0000011 (loop variable = 3, items [1] and [2] are chosen)
...
x1111111 (loop variable = 127, items [1], [2], [3], [4], [5], [6], [7] are chosen)