0

私は以下のような配列を持っています

int[] array = new array[n];// n may be 2,3,4

N=4の例

int[] array = new array[4];

array[0] = 2;
array[1] = 4;
array[2] = 6;
array[3] = 8;

linqを使用せずにこの配列の繰り返されないすべての組み合わせを計算するにはどうすればよいですか?

2,4,6,8 2,4,8,6
2,8,6,4
2,6,4,6
8,6,4,22,4,6,8 .......。
_
_ ...............。 _



4

3 に答える 3

4

これは、反復子を使用した非常に柔軟な C# 実装です。

于 2009-05-28T14:19:26.373 に答える
0

繰り返しのないすべての組み合わせを探しているとすれば、それは N 個あることを意味します。そのような組み合わせ...(つまり、あなたの場合、 N! = 4! = 24 のような組み合わせ)。

これを投稿している最中に、dommer が良い実装を指摘してくれました。

N の値が大きい場合は非常に遅くなることに注意してください (N! 順列があるため)。

于 2009-05-28T14:21:35.807 に答える
0

世界の2つの可能な状態について考えて、それが何らかの光を当てるかどうかを確認してください.

1) 配列に重複はありません (つまり、配列内の各数値は一意です)。この場合、可能な順列はいくつありますか?

2) アレイ内に 1 つの重複があります。では、第 1 部で計算した順列の数のうち、重複しているのはどれだけですか。

うーん、簡単にするために 3 つの要素の配列を考えてみましょう

1,3,5 にはいくつの順列がありますか?

1,3,5

1,5,3

3,1,5

3,5,1

5,1,3

5,3,1

したがって、6 つの順列

リストを 1,5,5 に変更するとどうなるでしょうか。

我々が得る

1,5,5

5,1,5

5,5,1

あなたへの私の質問は、階乗を介してこれをどのように表現できますか?

おそらく、4 つの要素の配列を使用してすべての順列を書き出してみて、電球が消えるかどうかを確認してみてください。

于 2009-05-28T14:25:52.757 に答える