![]()
//date:2020.4.23
//利用比特位串来求幂集合
//比如
/*
000 -> j=0 i=0输出空
001 -> j=0 i=1 输出 a
010 -> j=1 i=2 输出b
011 -> j=1 j=0,i=3 输出 ab,一次类推
100 -> j=2,i=4 输出c
101 -> j=2,j=0,i=5 输出ac
110 -> j=2,j=1 i=6 输出 bc
111 -> j=2,j=1,j=0,i=7 输出abc
*/
#include <iostream>
using namespace std;
void getres(char a[],int i)
{
cout<<"{";
bool douhao=false;//控制逗号的输出
int j=0;//表示第几个字符
while(i>0)
{
if(i&1) //是1 i&1表示该数的个位与1做与运算,是1,表示是奇数也就是1
{
if(douhao)
cout<<",";
cout<<a[j];//输出字符串
douhao=true;
}
i=i>>1;
j++;//输出第几个字符
}
cout<<"}"<<endl;
}
int main()
{
char a[]= {'a','b','c'};
int len=1<<sizeof(a)/sizeof(char);//表述要输出的集合数量
for(int i=0; i<len; i++)
getres(a,i);
return 0;
}
输出结果
{}
{a}
{b}
{a,b}
{c}
{a,c}
{b,c}
{a,b,c}