比特位串求幂集

利用比特位串来求幂集合

//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}

  

原文地址:https://www.cnblogs.com/someonezero/p/12761996.html