样例:7
答案:
1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+1+5 1+2+2+2 1+2+4 1+3+3 1+6 2+2+3 2+5 3+4
#include<bits/stdc++.h>
using namespace std;
int a[110];
int n;
//m是当前所有自然数之和,num是拆分出的最大自然数,x是拆分出的自然数个数
void dfs(int m,int num,int x){
//保证拆分出的自然数之和为n,并且拆分出的数要多余2个
if(m==n&&x>2){
for(int i=1;i<=x-2;i++){
cout<<a[i]<<'+';
}
cout<<a[x-1]<<endl;
}
if(m>n)
return;
for(int i=num;i<=n;i++){//循环体保证拆分出的自然数遵循不减原则
a[x]=i;
dfs(m+i,i,x+1);
}
}
int main(){
cin>>n;
dfs(0,1,1);
}