从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
输入格式
输入一个整数n。
输出格式
每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。
对于没有选任何数的方案,输出空行。
本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。
数据范围
1≤n≤15
输入样例:
3
输出样例:
3
2
2 3
1
1 3
1 2
1 2 3
/*
主要思想:任意选择多个,那么我们只需要判断这个数字是否选择即可
*/
#include <iostream>
using namespace std;
int nums[16];//0-代表这个数字不用,1-代表这个数字用了
int n;
void dfs(int index)//决定index这个数字是否使用
{
//index == n,代表已经判断到最后一个位置了
if(index == n)
{
for(int i = 0; i < n; i++)
{
if(nums[i] == 1)
cout << i+1 << " ";
}
cout << endl;
return;
}
nums[index] = 1;//这个数字使用
dfs(index+1);//去判断下一个数字
nums[index] = 0;//这个数字不使用
dfs(index+1);
}
int main()
{
cin >> n;
dfs(0);
return 0;
}
/*
主要思想:用2进制数字代表这个数字是否取用0代表不取用,1代表取用
则是输出所有2进制数所有可能
*/
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double n;
cin >> n;
int c = pow(2,n);//计算出对应的十进制数字
for(int i = 0; i < c; i++)//遍历十进制,即遍历所有二进制
{
//取出第j位置上是1还是0
for(int j = 0; j < n; j++)
{
if((i >> j&1) == 1)//为1,代表取用
{
cout << j+1 << " ";
}
}
cout << endl;
}
return 0;
}