问题:从1-n这n个整数中随机选取任意多个,输出所有可能选举方案
输入格式:输入一个整数n
输出方案:每行输出一种方案
同一行中的数必须升序排列,相邻两个数之间用空格隔开
对于没有任何数的方案,输出空行
数据范围:1<=n<=15
输入样例:3
输出样例:
3
2
2 3
1
1 2
1 3
1 2 3
#include<iostream>
using namespace std;
const int N=15;
int n; //表示要输入的数字
int st[N]; //记录当前状态,0表示不考虑,1表示 选它,2表示不选它
int ways[1<<15][16],nub; //用二维数组记录所有方案;nub表示当前方案数量的多少
void f(int k) //k:指当前传到第几位了
{
if(k>n) //判断边界,到达最后一位时,到达边界
{
/* for(int i=1;i<n;i++) //记录所有方案
if(st[i]==1)
ways[nub][i]=i;
nub++;*/
for(int i=1;i<=n;i++)
if(st[i]==1) //当前位置为1的时候表示选它,
printf("%d",i); //输出结果
printf("\n");
return;
}
//分支节点
st[k]=2; //第一个分支 ,不选
f(k+1); //递归到下一个位置
st[k]=0; //回溯,恢复到原来的状态
st[k]=1;
f(k+1); //第二个分支,选
st[k]=0; //回溯,恢复到原来的状态
}
int main()
{
cin>>n;
f(0); //传入当前枚举到第几类了
return 0;
/*f(1);
for(int i=0;i<nub;i++)
{
for(intj=1;j<n;j++)
printf("%d",ways[i][j]);
printf("%d");
}*/
return 0;
}