二进制枚举

来源:互联网 发布:自动通话录音软件 编辑:程序博客网 时间:2024/06/07 17:17

二进制:所谓的二进制,就是逢二进一的计数方法。我们计算机能识别的也都是二进制数,也就是最常见的01串。

枚举:就是例举出所有的情况。

二进制枚举:我们都知道二进制数是只有0和1构成,在c语言中1代表真,0代表假。对于01数列,我们可以认为1代表取用,0代表不取用。

举例:假设我们要求出某个集合的所有子集。我们可以二进制枚举的方法,一共有 1<<n 个子集,所以列出1到(1<<n)的所有二进制数,这里的每个数就是对应的每个集合。然后用过&运算的方式,判断所有的位上是1还是0,通过&上(1<<m),判断m位上是1,还是0,如果m位上是0,那结果是0,如果m上是1,结果是1.

注释:上述讲述中牵扯位运算的知识,不了解的可以先去了解一下位运算。

#include<bits/stdc++.h>using namespace std;void print_subset(int n,int s){for(int i = 0 ; i < n ; i++)if(s&(1 << i))printf("%d",i);printf("\n");}int main(){while(1){int n;cin >> n;for(int i = 0 ; i < (1 << n) ; i++)print_subset(n,i);}return 0; } 

原创粉丝点击