#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int arr[40];
void print_subset(int n,int s)
{
for(int i=0;i<n;i++)
if(s&(1<<i))//s在这里表示集合,如s=13,转换为二进制是1101,表示集合里有0,2,3这三个元素,然后1<<i 和s&时只有i=0,2,3才为真
printf("%d ",arr[i]);//第i个元素存在,所以输出
printf("\n\n");
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&arr[i]);
for(int i=0;i<(1<<n);i++)//1<<n 表示共有2的n次方个子集
print_subset(n,i);
return 0;
}
可重复的枚举还没看QAQ