【问题标题】:All array possibilities所有阵列可能性
【发布时间】:2011-01-05 23:02:58
【问题描述】:

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

盒子[1] := 14;
盒子[2] := 2;
盒子[3] := 4;
盒子[4] := 5;
盒子[5] := 6;
盒子[6] := 8;

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

【问题讨论】:

  • “box[1] = box[6], 然后 box[6] = box[1]” 是什么意思?
  • 是例子。也可以是 box[1] = 2;框[2] = 14;框[3] = 6; box[5] = 4 等等。所有的可能性。
  • 你的意思是你想要数字 14、2、4、5、6 和 8 的所有排列?
  • 那么这可能会有所帮助:google.com/search?q=permutation+algorithm
  • -1 因为这个问题是作为一个编程问题而不是一个统计/排列问题提出的,并且作为一个编程问题,它的描述不够好,无法回答。

标签: php delphi loops pascal


【解决方案1】:

所以基本上,您有一组可以包含 (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)

【讨论】:

    【解决方案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;
    

    【讨论】:

      【解决方案3】:

      I've answered you 已经? =S

      【讨论】:

      • 哇......我不敢相信这个令人困惑的问题以前曾出现过。 (这真的不是那么令人困惑,但是哇......)
      • 这不是我真正想要的,因为当一个数组的 var 改变时,它必须改变另一个。比如box[1]变成box[2],box[2]也要变成box[1]
      • 如果结果是唯一的,您可以快速删除所有具有重复值的数组。我不确定我是否在关注。
      • Donator,当box[2]变成box[1]并且box[1]必须取box[2]之前的值,你要的词汇就是swap .你现在上的初级课程更多的是学习主题领域的词汇,而不是其他任何东西。没有词汇,你什么都不会理解,也没有人会理解你,就像今天使用 possibilities 的例子,当你真正的意思是 permutations
      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多