在 C 中生成 n 个项目的所有 k 组合的算法
当前的任务是创建一个程序,生成并显示所有可能的组合来自 n 个个体的 k 个不同的人的组合。这可以使用组合生成算法来实现,其操作如下:
算法:
对于每个排列:
C 中的实现:
#include <algorithm> #include <iostream> #include <string> void comb(int N, int K) { std::string bitmask(K, 1); // K leading 1's bitmask.resize(N, 0); // N-K trailing 0's // print integers and permute bitmask do { for (int i = 0; i < N; ++i) // [0..N-1] integers { if (bitmask[i]) std::cout << " " << i; } std::cout << std::endl; } while (std::prev_permutation(bitmask.begin(), bitmask.end())); } int main() { comb(5, 3); }
示例输出:
0 1 2 0 1 3 0 1 4 0 2 3 0 2 4 0 3 4 1 2 3 1 2 4 1 3 4 2 3 4
以上是如何在 C 中生成 n 个项目的所有 k 个组合?的详细内容。更多信息请关注PHP中文网其他相关文章!