-2

異なる数値 (整数) の配列があります。その配列の長さは設定されていないため、プログラムを実行するたびに異なります。次に、他に 2 つの配列があり、最初の配列を他の 2 つの配列に分散するためのすべての可能性をプログラムに評価させたいと考えています。例えば:

Array 1: 1,3,5

これで、プログラムは、たとえば次のように他の 2 つの配列を作成する必要があります。

Array 2: 1,3
Array 3: 5

またはこのように:

Array 2: 1,5
Array 3: 3
4

1 に答える 1

2

項目の配置を 2 進数として考えると、項目の数と同じ桁数のすべての 2 進数がすべての可能な組み合わせを表すことがわかります。

したがって、3 つのアイテムの場合、8 つの可能な組み合わせがあります。

000: [1,3,5], []
001: [3,5], [1]
010: [1,5], [3]
011: [5], [1,3]
100: [1,3], [1]
101: [3], [1,5]
110: [1], [3,5]
111: [], [1,3,5]

を使用して可能な組み合わせの数を計算できます1 << theArray.Length

以下を使用して、特定の組み合わせ (0 から可能な -1) を取得できます。

public static void GetArrays(int[] arr, int combination, out int[] arr1, out int[] arr2) {
  List<int> a = new List<int>();
  List<int> b = new List<int>();
  foreach (int value in arr) {
    if ((combination & 1) == 1) {
      b.add(value);
    } else {
      a.add(value);
    }
    combination >>= 1;
  }
  arr1 = a.ToArray();
  arr2 = b.ToArray();
}
于 2012-11-25T15:07:35.107 に答える