我有一个不同数字的数组(整数)。未设置该数组的长度,因此每次运行程序时它都不同。然后我有两个其他数组,我希望程序评估所有可能性,以便将第一个数组分配到另外两个数组中。例如:
Array 1: 1,3,5
现在程序应该使另外两个数组如下所示:
Array 2: 1,3
Array 3: 5
或者像这样:
Array 2: 1,5
Array 3: 3
答案 0 :(得分: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();
}