【发布时间】:2018-09-15 15:15:52
【问题描述】:
所以我正在寻找一个程序,它遍历数组索引的所有组合,并检查数组中是否有对应的数字加起来为特定数字(例如,有 2 个索引:array[0 to 10] +数组[1 到 10] == 数字?)。它应该排除具有相同索引的组合,最好也排除具有其他顺序的组合(例如,只有 1,2 而不是 2,1)。当它找到这样的组合时,它应该保存正确的索引。 我的解决方案是使用 for 循环,但是我必须为每个额外的索引创建一个新的 for 循环,这大约会非常乏味。 40 个指数。下面是一个 C++ 示例:
//3 indices
for (int i = 0; i < iter - 2 && canWork == false; i++) {
for (int k = i + 1; k < iter - 1 && canWork == false; k++) {
for (int l = k + 1; l < iter && canWork == false; l++) {
if (sizes[i] + sizes[k] + sizes[l] == number) {
indices[0] = i;
indices[1] = k;
indices[2] = l;
canWork = true;
}
}
}
}
//4 indices
for (int i = 0; i < sizeArray - 3 && canWork == false; i++) {
for (int k = i + 1; k < sizeArray - 2 && canWork == false; k++) {
for (int l = k + 1; l < sizeArray -1 && canWork == false; l++) {
for (int m = l + 1; m < sizeArray && canWork == false; m++) {
if (array[i] + array[k] + array[l] + array[m] == number) {
indices[0] = i;
indices[1] = k;
indices[2] = l;
indices[3] = m;
canWork = true;
}
}
}
}
}
sizeArray 后面的 - 2 和 -1 以及 + 1 的开头用于跳过相同的总和。 我是一个非常初学者的程序员,所以如果代码那么糟糕,请原谅我。我也找不到关于这个问题的任何信息,所以我在这里问。
【问题讨论】:
-
你应该看看dynamic programming。
-
"查找 x^n ... 的所有组合" - 注意在 C++ 中
^表示 XOR,not 取幂。小心清楚地表达你想要什么,否则可能会被误解。
标签: c++ combinations