Problem Description
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
Input
输入有多组数据,对于每组数据就一个数n。
Output
对于每组输入输出n的拆分方法。
Sample Input
4
Sample Output
1+1+1+1 1+1+2 1+3 2+2
#include<iostream> #include<cstdio> using namespace std; void search(int ,int ); void output(int ); int a[1000],n; int main() { //freopen("a.txt","r",stdin); while(scanf("%d",&n)!=EOF) { a[0]=1; search(n,1); } return 0; } void search(int s,int t) //把s个数中的某个数放在第t位 { for(int i=a[t-1];i<=s;i++) if(i<n) //去除第一位的特殊数n { a[t]=i; s-=i; if(s==0) output(t); else search(s,t+1); s+=i; } } void output(int t) { for(int i=1;i<=t-1;i++) printf("%d+",a[i]); printf("%d\n",a[t]); }