描述
输入自然数 n,然后将其分拆成由若干数相加的形式,参与加法运算的数可以重复。
每个拆分后的序列中的数字从大到小排序。然后你需要输出这些序列,其中字典序大的序列需要优先输出。
输入描述
一个待拆分的自然数n,(n≤50) 。
输出描述
若干个拆分的加法等式。
样例输入 1
5
样例输出 1
5=5 5=4+1 5=3+2 5=3+1+1 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1
#include<bits/stdc++.h>
using namespace std;
int ans[60],m;
void f(int n,int pre,int k){
if(n==0){//递归出口
cout << m << "=";
for(int i=1;i<=k-2;i++){
cout << ans[i] << "+";
}
cout << ans[k-1] << endl;
return;
}else{//没有分解结束
for(int i=min(n,pre);i>=1;i--){//枚举下标k位置要放置的数字
ans[k] = i;//数字i放在下标为k的位置
//n-i为下一次要分解的数字,i前一次分解出来的数字
f(n-i,i,k+1);
}
}
}
int main(){
cin >> m;
f(m,m,1);
return 0;
}