-2

我有一个不同数字(整数)的数组。该数组的长度未设置,因此每次运行程序时它都不同。然后我有另外两个数组,我希望程序评估将第一个数组分配到其他两个数组的所有可能性。例如:

Array 1: 1,3,5

现在程序应该制作另外两个数组,例如:

Array 2: 1,3
Array 3: 5

或者像这样:

Array 2: 1,5
Array 3: 3
4

1 回答 1

2

将项目的位置视为二进制数字,然后您会看到与项目数具有相同位数的所有二进制数表示所有可能的组合。

因此,对于三个项目,您有 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 回答