P2404 自然数的拆分问题
#include<bits/stdc++.h>
using namespace std;
int n;
int sum=0;
int a[1000];
int indexx=0;
void dp(int x){
if(x==n){
//判别是否输出的时候出现后面的元素比前面大,如果没有出现才可以正常的输出
int flag=0;
for(int i=1;i<indexx;i++){
if(a[i-1]>a[i]){
flag=1;
break;
}
}
if(flag==0) {
for (int i = 0; i < indexx; i++) {
if (i == indexx - 1) {
cout << a[i] << endl;
} else {
cout << a[i] << "+";
}
}
}
return;
}
else if(x>n){
return;
}
for(int i=1;i<n;i++){
a[indexx]=i;
sum+=i;
indexx++;
dp(sum);
sum-=i;
indexx--;
}
}
int main(){
cin>>n;
dp(0);
return 0;
}