我正在尝试使用 C++ 获取数组的所有组合
double* list1 = new double[size];
该数组中的项目是 {1,2,3,4,5}
我需要将所有可能的组合添加到一个堆栈中,例如:
1+2, 1+2+3, 1+2+3+4,1+2+3+4+5, 1+3, 1+3+4, 1+3+4+5, 1+4, 1+4+5, 1+5...
我遇到的问题是我正在通过 2 个 for 循环和一个 while 循环执行此操作
for(int i = 0; i < size - 1; i++)
{
for(int j = i; j < size - 1; j++)
{
double temp = list1[i] + list1[j + 1];
list1combos.push(temp);
int k = j + 2;
while (k <= size - 1)
{
temp = temp + list1[k];
list1combos.push(temp);
k++;
}
}
}
我可以得到上面列出的那些,但我不知道如何组合编码,例如 1+3+5
或 1+2+5
请告知如何获得这些组合,谢谢 stackoverflow!
最佳答案
由于顺序无关紧要,我建议使用与您的 x
大小相同的数组并对其执行二进制增量,即您从仅初始化为 的数组开始0
并计数,直到您只有 1
。每增加一个 1
,您就会从 x
数组中选择一个排列。
First iteration:
0 0 0 0 0 -> empty
Second iteration:
0 0 0 0 1 -> you pick 5
3rd iteration:
0 0 0 1 0 -> you pick 4
4th iteration:
0 0 0 1 1 -> you pick 4 and 5
And so on until you reach:
1 1 1 1 1 -> you pick 1, 2, 3, 4 and 5
关于C++,数组元素不按顺序组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24126368/