任意给定n个字母,输出它的所有子集。
#include<iostream>
#include<cmath>
using namespace std;
char a[]={"abc"};
// n个字符的子集数为2的n次方-1.
// n个字符的子集对应0 ~ pow(2,n)-1 的二进制数。比如n=3,则数字0的二进制数为000,即对应空集。
// 数字1的二进制数为001,则对应于于三个字符的第一个字符……,数字6的二进制数为110,则对应于
// 三个字符中的后两个字符。
void subset(int n){
for(int i=0;i<pow(2,n);i++){
for(int j=0;j<=n;j++){
if(i&(1<<j)) cout<<a[j]<<" "; //(1<<j)表示1左移j位.
}
cout<<endl;
}
}
int main(){
int n=3;
subset(n);
return 0;
}