把自然数m分解为若干个自然数的和,输出每一种分法,从小到大排列.
样例:
输入:5
输出:
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
5=5
#include<iostream>
using namespace std;
int a[1000]={0};
int m;
int f(int k,int n){
if(n==0){
cout<<m<<"="<<a[1];
for(int i=2;i<=k-1;i++)cout<<"+"<<a[i];
cout<<endl;
return 0;
}
if(n<a[k-1])return 0;
for(int i=a[k-1];i<=n;i++){
a[k]=i;
f(k+1,n-i);
}
}
int main(){
cin>>m;
a[0]=1;
f(1,m);
return 0;
}