子集
内存限制: 128 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
现有一个含有 n 个元素的集合(集合中没有重复的数字),请你输出这个集合的所有非空子集,并且每个子集里面的元素保证是非递减序列。
输入格式
输入有两行。
第一行为 1 个整数 n,表示初始集合元素的个数。
第二行有 n 个整数,表示集合中从左往右每个元素的值,每两个数之间有空格隔开
输出格式
输出这个集合的所有子集,每个子集占一行,子集中的每个元素之间用空格隔开,输出集合的顺序见样例
样例
样例输入:
3
3 1 2
样例输出:
1
2
1 2
3
1 3
2 3
1 2 3
数据范围与提示
n <= 20,0 <= a [ i ] <= 10 ^ 9
#include <bits/stdc++.h>
using namespace std;
int n, a[25];
void f(int x) {
int cnt = 1;
while(x != 0) {
if(x & 1) {
printf("%d ", a[cnt]);
}
cnt++;
x >>= 1;
}
printf("\n");
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
sort(a + 1, a + n + 1);
for(int i = 1; i < (1 << n); i++) {
f(i);
}
return 0;
}