打印所有真值组合的练习题
来源:互联网 发布:w10怎么卸载软件 编辑:程序博客网 时间:2024/05/10 11:52
一个简单的练习题,用到了简单的位运算。
貌似效率不怎么样,只是觉得这个实现简单点。
对任意 n > 0,其组合数共有 2的n次方种。
工具:Vim + GCC。
#include <stdio.h>/* * 给定n个布尔变量(x[1]...x[n]),打印所有可能的真值组合. * 例如: n = 2时, 共有四种可能: * (true, true),(true, false),(false, true),(false, false) * * Warning:请不要输入太大的 n 值,因为打印所需的时间是相当的可观; * 当 n = 25, 每秒打印100种组合, 大约需要4天...... * */void print_sequence(int n){ //n应该大于0. if ( n <= 0 ) { return; } int count = (1 << n);//组合数量计数器,即共有count种组合. int binary_bits = 0;//(111,101,010...)布尔组合的位串. //因为机器原因,最多只能表示31位(有符号int类型的数据位). //你输入32就知道了<^_^>. //可以改用long, or long long以增加数据位,同时count也要改.(打印时间要以年计算了,呵呵). int i, j, bit; for (i = 0; i < count; i ++) { binary_bits = i; printf("<<%d>>. (", (i + 1)); for (j = 0; j < n; ++j) { bit = binary_bits % 2; if (bit) { printf("TRUE"); } else { printf("FALSE"); } if ( j < (n - 1) ) { printf(", "); } binary_bits >>= 1; } printf(")\n"); }}//Application startint main(void){ int amount = 0; do { printf("Input amount of boolean varibles:"); scanf("%d", &amount); } while(amount <= 0); print_sequence(amount); getch(); return 0;}
输入 32 的结果
输入33的结果
- 打印所有真值组合的练习题
- n个布尔变量,打印所有可能的真值组合
- 打印括号的所有组合
- 打印所有字母所有可能的组合
- 打印出所有可能的括号组合
- 打印n个字符的所有组合
- 【一些题】打印字符串的所有组合
- 输入abcd 打印所有字母的组合
- 打印所有的组合(组合问题C++实现)
- 打印所有小写字母所有可能的组合
- 打印所有匹配括号组合
- 打印出一个字符串的所有组合的递归方式
- 打印包含n个括号的所有合法的组合
- 打印一个字符串中字符的所有组合
- 打印和为N的所有连续数列组合
- 打印n对括号匹配的所有组合
- 一个集合所有子集和为sum的组合打印
- 数据结构学习笔记(一),输出n个布尔变量所有真值组合
- 聚簇索引与非聚簇索引
- 第一周实验报告3-1
- dialog也有findViewById方法
- 随笔
- Linux死机解决办法
- 打印所有真值组合的练习题
- UIImageView如何以九宫格方式拉伸一个图片
- 我终于弄出来,哈哈!
- 查找最小的k个元素-堆的实现方法(下)
- 第二周实验报告4
- 联通项目中的常见术语(BTS、BSC、MSC、VLR、HLR)
- 思科ASR1000构筑托管移动VPN解决方案
- 打印螺旋数
- java 反射学习