增量构造法,位向量法,二进制法
#include<bits/stdc++.h>
using namespace std;
int a[100];
void print_sub(int* A,int cur,int n){
for(int i=0;i<cur;i++)
cout<<A[i]<<' ';
cout<<endl;
int s=cur?A[cur-1]+1:1;
for(int i=s;i<=n;i++)
{
A[cur]=i;
print_sub(A,cur+1,n);
}
}
int main(){
int n;
while(cin>>n){
print_sub(a,0,n);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[100];
void print_sub(int* b,int n,int cur){
if(cur==n)
{
for(int i=0;i<n;i++)
if(b[i]) cout<<i+1<<' ';
cout<<endl;
return;
}
b[cur]=1;
print_sub(b,n,cur+1);
b[cur]=0;
print_sub(b,n,cur+1);
}
int main(){
int n;
while(cin>>n){
print_sub(a,n,0);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
void print_sub(int n,int cur){
for(int i=0;i<n;i++)
if(cur&(1<<i)) printf("%d ",i+1);
printf("\n");
}
int main(){
int n;
while(cin>>n){
for(int i=0;i<(1<<n);i++)
print_sub(n,i);
}
return 0;
}