c++ - 在 C++ 中生成组合列表的最简单方法是什么?

标签 c++ algorithm

通常,您会遇到这样的问题:属性 A 可以是真或假,属性 B 也可以是真或假,依此类推。我们想要测试 A 为真而 B 为假的每个组合,等等。因此,例如我们可能需要以下列表:

[true,true,true]
[true,true,false]
[true,false,true]
[true,false,false]
[false,true,true]
[false,true,false]
[false,false,true]
[false,false,false]

在 Haskell 或 Python 中,这可以通过列表乘积函数来完成。

我的问题是,生成它的最简单和/或最快的方法是什么?我总是通过将数字转换为二进制,然后将二进制转换为数组来完成此操作。但这看起来很麻烦,因为十进制到二进制的转换并非完全微不足道,而且我们还需要担心用前导零填充二进制以正确填充数组。

我已经在不同的上下文中多次实现和重新实现这种功能,我想知道是否有一种足够简单的方法可以让您在必要时从头开始实现它——而无需真正思考?

最佳答案

我不太确定代码,但按照这些思路应该可以工作。

for( int i = 0; i < 8; i++ ){
  printf( "[%s, %s, %s]\n", (i & 0x1)?"True":"False", ((i & 0x2) >> 1)?"True":"False" , ((i & 0x4) >> 2)?"True":"False" );
}

我正在遍历数字 0 到 7(分别为 000 到 111)并隔离每一位以识别 bool 值。

关于c++ - 在 C++ 中生成组合列表的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593787/

相关文章:

c++ - 将所有组合放入数组中,其中所有条目的总和等于给定整数

c++ - 将代码移动到另一个 header 后重新定义错误

c++ - 在 Visual Studio 2013 for C++ 中调试时的错误代码

C++ - 整个程序持续时间的单个本地类实例

algorithm - 实现迭代单栈二叉树复制函数

algorithm - 双向 key 加密/哈希算法

algorithm - 你如何防止页面浏览量的游戏?

android - 使用 ARM NEON 调整图像大小

c++ - 递归构建可变参数函数的返回类型时的奇怪行为

C++ 指向 vector 的指针