题目连接ios
从 1~n 这 n 个整数中随机选取任意多个,输出全部可能的选择方案。c++
输入一个整数n。spa
每行输出一种方案。code
同一行内的数必须升序排列,相邻两个数用刚好1个空格隔开。blog
对于没有选任何数的方案,输出空行。递归
本题有自定义校验器(SPJ),各行(不一样方案)之间的顺序任意。ci
1≤n≤151≤n≤15get
3
3 2 2 3 1 1 3 1 2 1 2 3
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int n; void dfs(int u,int state) { if(u==n)//表明枚举结束,开始输出 { for(int i=0;i<n;i++) if(state >> i & 1)//若是state右移i位,其值等于1 cout<<i+1<<' '; cout<<endl; return; } dfs(u+1,state);//不用u这个数 dfs(u+1,state | 1 << u);//state的第u位 置为1 用u这个数 } int main() { cin>>n; dfs(0,0);//左边的0表示第几个数,右边的表示状态 return 0; }