7-16 整数拆分
将一个正整数n拆分成若干个正整数的和(至少两个数,n<=100)。
输入格式:
一个正整数n
输出格式:
若干行,每行一个等式(数与数之间要求非降序排列)。最后一行给出解的总个数
输入样例:
在这里给出一组输入。例如:
4
输出样例:
4=1+1+1+1
4=1+1+2
4=1+3
4=2+2
4
最后一行的4表示总共有4个解。
#include <iostream>
using namespace std;
int x[20], n, dep, cnt;
int f(int r,int t) {
if (r==0) {
cout << n << "=";
for (int j = 1; j < t-1; j++) {
cout << x[j] << "+";
}
cout << x[t - 1]<<endl;
cnt++;
return cnt;
}
else
for (int j = x[t - 1]/*约束*/; j <= r; j++) {
if (j < n) {
x[t] = j;
f(r - j, t + 1);
}
}
}
int main() {
cin >> n;
x[0] = 1; //边界
f(n,1);
cout << cnt;
return 0;
}