码迷,mamicode.com
首页 > 其他好文 > 详细

二进制枚举

时间:2017-08-03 12:45:00      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:数组   长度   write   stream   std   没有   name   style   turn   

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;
}

 

二进制枚举

标签:数组   长度   write   stream   std   没有   name   style   turn   

原文地址:http://www.cnblogs.com/ilovelianghui/p/7278834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!