其实这题递推好写,因为所有状态就是$0$到$(1<<n)-1$,所以直接枚举所有数即可
递归的话略微麻烦点,不过也简单
递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <iostream> using namespace std;
int n;
void dfs(int d,int state){ if(d==n){ for(int i=0;i<n;i++) if(state>>i&1) printf("%d ",i+1); printf("\n"); return; } dfs(d+1,state); dfs(d+1,state|(1<<d)); }
int main(){ scanf("%d",&n); dfs(0,0); return 0; }
|
递推
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <iostream> using namespace std;
int main(){ int n; scanf("%d",&n); for(int i=0;i<(1<<n);i++){ for(int j=0;j<n;j++) if(i>>j&1) printf("%d ",j+1); puts(""); } return 0; }
|