通过位运算来进行暴力枚举,下面通过代码讲解(代码来自[(https://blog.csdn.net/easylovecsdn/article/details/82789858)])
#include<bits/stdc++.h>
using namespace std;
int a[]={1,2,3};
void print(int flag){
int temp = flag;
for(int i=0;i<3;i++){
if(temp & 1>=1)
cout<<a[i]<<" ";
temp>>=1;//把temp右移一位的值赋给temp。
}
cout<<endl;
}
int main(){
int flag=0;
while(flag<pow(2,3)){
print(flag);
flag++;
}
cout<<"子集个数:"<<flag<<endl;
return 0;
}
print函数是实现位运算的函数,在其中输入flag,temp=flag。关键在于temp>>=1.这句话的意思是将temp向右移一位然后赋给temp。参考下面截图。
在main函数中flag<pow(2,3)意思是1 2 3有2的3次方个集合,flag在这个范围内一直循环。