题目链接:https://ac.nowcoder.com/acm/contest/998/A
思路:对于每个整数来说,可以“选”,也可以“不选”。所有可能的方案种数为 2 n 2^n 2n。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n; // n个整数
vector<int> chosen; // 被选择的数
void solve(int x)
{
if (x == n + 1)
{
for (int i = 0; i < chosen.size(); i++)
{
printf("%d ", chosen[i]);
}
puts("");
return;
}
// "不选x"分支
solve(x + 1);
// "选x"分支
chosen.push_back(x); // x已被选择
solve(x + 1);
chosen.pop_back(); // 准备回溯到上一问题之前要还原现场
}
int main()
{
scanf("%d", &n);
solve(1);
return 0;
}