7
1+6 1+1+5 1+1+1+4 1+1+1+1+3 1+1+1+1+1+2 1+1+1+1+1+1+1 1+1+1+2+2 1+1+2+3 1+2+4 1+2+2+2 1+3+3 2+5 2+2+3 3+4
#include<bits/stdc++.h> using namespace std; int a[10000]; int print(int n) { for(int i=1; i<=n; i++) { if(i!=1) printf("+"); printf("%d",a[i]); } printf("\n"); } int DFS(int n,int ans) //ans表示递归的深度,每一个深度对应 多个表达式, { for(int i=1; i<=n/2; i++) //后者大于等于前者 { if(i>=a[ans-1]) //保证后一个值一定大于等于前一个值 { a[ans]=i; a[ans+1]=n-i; print(ans+1); DFS(n-i,ans+1); } } } int main() { int n; while(~scanf("%d",&n)) { a[0]=0; DFS(n,1); } }
..num表示有多少各表达式
#include<bits/stdc++.h> using namespace std; int k=0; int num=0; int DFS(int x,int y,int ans) { if(x<k) return 0; num++; //cout<<x<<"$"<<y<<endl; for(int i=x; i<=y/2; i++) { DFS(i,y-i,ans+1); } } int main() { int n; while(~scanf("%d",&n)) { num=0; for(k=1; k<=n/2; k++) { DFS(k,n-k,1); } cout<<num; } }