zoukankan      html  css  js  c++  java
  • 二进制枚举

    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;
    }
  • 相关阅读:
    员工转正考核
    前端高级技术考察
    前端基础技术考察
    高级前端评定表
    初级前端评定表
    前端工程师等级评定
    前端软实力
    Decode Ways
    深度学习在目标跟踪中的应用
    Interleaving String
  • 原文地址:https://www.cnblogs.com/pprp/p/7278834.html
Copyright © 2011-2022 走看看