#include<cstdio>
#include<iostream>
using namespace std;
void print_subset(int n,int s){
for(int i=0;i<n;i++){
if(s&(1<<i)) cout<<i;
}
if(s!=0)//第一次循環不需要換行
cout<<endl;
}
int main(){
int n=5;//n爲集合元素個數 編號從0開始 爲0,1,2……n-1
for(int i=0;i<(1<<n);i++)//主算法
print_subset(n,i);
system("pause");
return 0;
}
可加入NumberOf1函數 使輸出的子集個數爲定值
#include<cstdio>
#include<iostream>
using namespace std;
int NumberOf1(int n){//返回二進制一的個數 注意類型
int count=0;
unsigned int flag=1;//flag從1開始 每次循環左移一位 與n做&運算 判斷該位是否爲1
while(flag<=n){ //flag大於n 退出循環
if(n&flag)
count++;
flag=flag<<1;
}
return count;
}
void print_subset(int n,int s){
if(NumberOf1(s)==3){//每個子集的個數爲3
for(int i=0;i<n;i++)
if(s&(1<<i)) cout<<i;
if(s!=0)//第一次循環不需要換行
cout<<endl;
}
}
int main(){
int n=5;//n爲集合元素個數 編號從0開始 爲0,1,2……n-1
for(int i=0;i<(1<<n);i++)//主算法
print_subset(n,i);
system("pause");
return 0;
}