-10

私はPascalコードを持っています(プログラミング言語は実際には何も意味しません):

ボックス[1]:= 14;
box [2]:= 2;
ボックス[3]:= 4;
ボックス[4]:= 5;
ボックス[5]:= 6;
ボックス[6]:= 8;

私はすべての可能性を手に入れたいです。たとえば、box [1] = box [6]、次にbox [6] =box[1]です。はい、手で書くことはできますが、ループでもっと賢くすることができると思います。助言がありますか?

4

3 に答える 3

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;
于 2010-01-17T10:15:05.667 に答える
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)
于 2010-01-18T17:54:33.350 に答える
0

もう答えた?=S

于 2010-01-16T23:24:24.713 に答える