输入n
输出1到n这个集合中包含的所有子集
/* //方法一: //思路:构造一个位向量visit,而不是直接构造子集A本身 #include<iostream> using namespace std; void fun(int *visit, int cur, int n) { if(cur == n+1) { for(int i = 1;i <= n;++ i) if(visit[i]) cout << i << ' '; cout<<endl; return; } visit[cur] = true; fun(visit,cur+1,n); visit[cur] = false; fun(visit,cur+1,n); } int main() { int n; cout<<"输入n,产生集合1到n中所有的子集。"<<endl; while(cin >> n) { bool *visit=new bool[n + 1]; for(int i = 1;i <= n;++ i) visit[i] = false; fun(a,1,n); } return 0; } */ //方法二: //思路:一次选出一个元素放到集合中 #include<iostream> using namespace std; void print_subset(int *A,int n,int cur) { for(int i = 0;i < cur;++ i) //打印当前集合 cout << A[i] << ' '; cout << endl; int s = cur ? A[cur - 1] + 1 : 0; for(int i = s;i < n; ++ i) { A[cur] = i; print_subset(A,n,cur + 1); } } int main() { int n; cout<<"输入n,产生集合1到n中所有的子集。"<<endl; while(cin >> n) { int *A=new int[n + 1]; for(int i = 1;i <= n;++ i) A[i] = i; print_subset(A,n,1); } return 0; }