【发布时间】:2016-08-14 08:33:08
【问题描述】:
我有 10 个文本文件,其中包含一列 1,-1,0。 我想设置一个组合来总结每个文件的元素。
例如,如果我想查看 10 个文件中 2 个文件的所有组合,我将创建以下 2 个循环: 双倍总和;
for(int i;i=0;i<n;i++){
for(int j;j=i;j<n;j++){
sum += x[i]+x[j];
}
}
另一个例子,如果我想查看 10 个文件中 3 个文件的所有组合,我会创建下面的 3 个循环:
for(int i;i=0;i<n;i++){
for(int j;j=i;j<n;j++){
for(int k;k=j;k<n;k++)
sum += x[i]+x[j]+x[k];
}
}
}
以此类推,如果我想查看 10 个文件中的 x 个文件的组合,我会创建 x 个循环。
我的问题是:我正在寻找一种通过选择 x 来确定循环数的算法。如果 x=2,那么我创建 2 个循环,如果 x=3,那么我创建 3 个循环,如果 x=4,那么我创建 4 个循环,......或者可能有另一种方式。 非常感谢
【问题讨论】:
-
如果你有 50 个文件,50 个嵌套循环?这太疯狂了。不用说,有更好的方法,例如使用
std::next_permutation以及一些逻辑来生成组合(SO上有许多示例),您需要一个(或两个)循环,无论项目数。 -
@PaulMcKenzie
std::next_permutation在这里看起来不是很有用,因为 TS 需要组合,而不是排列 -
@alexeykuzmin0 -- 你错了。如果您输入some effort into it.,则可以使用
std::next_permutation生成组合。诀窍是使用由布尔值组成的控制数组。
标签: c++ loops combinations