原题链接:自然数的拆分问题 - 洛谷
目录
1. 题目描述
2. 思路分析
dfs枚举组合型变式。
dfs的三个参数:
cnt:选了几个数
sum:这些数的和
st:从哪个数开始
3. 代码实现
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 20;
int n, a[N];
void dfs(int cnt, int sum, int st) {
if (sum > n) return;
if (sum == n) {
for (int i = 1; i <= cnt-1; i++) {
if (i == 1) cout << a[i];
else cout << "+" << a[i];
}
cout << endl;
return;
}
for (int i = st; i <= n-1; i++) {
a[cnt] = i;
dfs(cnt + 1, sum + i, i);
}
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n;
dfs(1,0,1);
return 0;
}