第一种方法:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int q[100];
int w[100];
int cmp(int a,int b)
{
return a<b;
}
void subset(int cur,int end)
{
int i;
for(i=0;i<cur;i++)
printf("%d",w[i]);
cout<<endl;
for(i=cur;i<end;i++)
{
w[cur]=q[i]; //赋值
if(i!=0&&w[cur]<=w[cur-1]) //避免相同元素和重复
continue;
subset(cur+1,end);
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&q[i]);
sort(q,q+n,cmp); // 必须先排序
subset(0,n);
return 0;
}
第二种方法:位向量法
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int q[100];
int vis[100];
void subset(int