可能重复:
从n个数中取k个元素返回所有组合的算法
是否有任何迭代算法,以取r个数的方式生成N个数字的组合?
是的,有。
这里是来自Wrong Answer Library的代码。
void generate_combos(int n, int k) {
int com[100];
for (int i = 0; i < k; i++) com[i] = i;
while (com[k - 1] < n) {
for (int i = 0; i < k; i++)
cout << com[i] << " ";
cout << endl;
int t = k - 1;
while (t != 0 && com[t] == n - k + t) t--;
com[t]++;
for (int i = t + 1; i < k; i++) com[i] = com[i - 1] + 1;
}
}
这将按字典顺序生成组合。
A B C D E F G H I J
。如果r=2,你期望得到什么?是AB BC CD DE EF FG GH GI IJ
还是AB AC AD AE AF AG AH AI AJ BC BD BE ...
? - Aif