题目描述:
利用递归方法生成具有n个元素的集合的所有子集。
输入:
第一行1有一个数字n,0<n<10。第二行有n个数字,代表集合中的数。
输出:
按照集合的格式这个集合所有自己的所有元素,每个子集占一行。
如果碰到看不懂的地方,请看我的另一篇博客
分析:

这道题用到了位运算,废话不多说,上代码:

include

include

using namespace std;
int main(void)
{

int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
    cin>>a[i];
}
for(int i=0;i<(1<<n);i++)
{
    vector<int> arr;
    for(int j=0;j<n;j++)
    {
        if(i&(1<<j))
        {
            arr.push_back(a[j]);
        }
    }
    cout<<"{";
    for(int j=0;j<arr.size();j++)
    {
        int s=arr[j];
        if(j!=arr.size()-1)
        {
            cout<<s<<" ";
        }else{
            cout<<s;
        }
    }
    cout<<"}";
    cout<<endl;
}
return 0;

}