二进制枚举
2017-08-03 11:34:36
writer:pprp
一个知识点,之前从来没有遇到,最近的集训中频繁用到这个,学习理解了
代码及分析如下:
// 二进制枚举 // 用来解决例如下边这样的问题 // 给你一串数列,要你将其中所有可能出现的sum找出来,就是说每个数都有两个状态,选或者是不选, //那么就选择用二进制通过 0 1 来表示选还是不选 #include <iostream> using namespace std; int main() { int n; //这里n意思是需要枚举的位数,在上面那个题中就是数组的长度 //二进制 0 - 111111111...11 n个1 //十进制对应的为:0 - 2^n while(cin >> n && n) { //这里i枚举的是二进制对应的十进制 for(int i = 0 ; i < (1 << n) ; i++) { //这里j代表的是判断第几位是1,即被选中 for(int j = 0; j < n ; j++) { // i & (1 << j )代表 十进制 i 表示的二进制数中,第j位是否被选中,如果被选中那么 输出 if(i & (1 << j)) { cout << j <<" " ; } } cout << endl; } } return 0; }
代码改变世界
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容