#include <iostream>
#include <cmath>
#include<vector>
using namespace std;
void inc(vector<int>&b,int n)
{
for(int i=0;i<n;i++) //遍历数组
{
if(b[i]) //将元素1改为0
b[i]=0;
else //将0改成1并退出循环
{
b[i]=1;
break;
}
}
}
void PSet(vector<int>& a,vector<int>& vn2,int n)
{
int i;
vector<int>b(n,0); //初始化为0
int pw=(int)pow(2,n); //求2的n幂
for(i=0;i<pw;i++)
{
cout<<"{";
for(int k=0;k<n;k++)
if(b[k])
cout<<a[k]<<" ";
cout<<"}";
inc(b,n); //b表示的二进制增1
}
cout<<endl;
}
int main()
{
int n;
int tmp;
vector<int> v1,vn2;
cin>>n;
for(int i=0;i<n;i++) //输入数据
{
cin>>tmp;
v1.push_back(tmp);
}
PSet(v1,vn2,n);
system("pause");
return 0;
}
运行结果
写oj时参考大佬的文章:求解幂集问题(c语言+蛮力法)_假如李白会编程的博客-CSDN博客
自己用c++和vector写了一下