#include<iostream>
using namespace std;
int ans[10001];
int n;
int total = 0;
void dfs(int s, int dep) {
if (s == 0) {
total++;
cout << n<<'='<<ans[1];
for (int i = 2; i < dep; i++)
cout << '+' << ans[i];
cout << endl;
}
for (int i = ans[dep-1]; i < n; i++) {
if (s - i >= 0) {
ans[dep] = i;
dfs(s - i, dep + 1);
}
}
}
int main()
{
ans[0] = 1;
cin >> n;
dfs(n,1);
cout << total;
return 0;
}
输入7
输出
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
14
变形:n个苹果放r个盘,允许有空盘
#include<iostream>
using namespace std;
int ans[10001];
int t, n, r;//n个苹果放r个盘,允许有空盘
int total = 0;//放置种类
void dfs(int s, int dep) {
if (s == 0&&dep<=r+1) {
total++;
cout << n << '=' << ans[1];
for (int i = 2; i < dep; i++)
cout << '+' << ans[i];
cout << endl;
}
for (int i = ans[dep - 1]; i <= n; i++) {
if (s - i >= 0) {
ans[dep] = i;
dfs(s - i, dep + 1);
}
}
}
int main()
{
cin >> t;//数据组数
ans[0] = 1;
while (t--) {
cin >> n>>r;
dfs(n, 1);
}
cout << total;
return 0;
}