題目描述:
任何一個大於1的自然數n,總可以拆分成若干個小於n的自然數之和。
輸入格式:
待拆分的自然數n。
輸出格式:
若干數的加法式子。
樣例輸入:
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
詳細的都在代碼里了,自己看吧。

1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[41],s; 4 void print(int s) { 5 for(int i=1;i<=s-2;i++)printf("%d+",a[i]); 6 printf("%d\n",a[s-1]); 7 } 8 void search(int n,int s,int pre){ 9 if(n==0 && s>2){ 10 print(s);//打印 11 return;//返回 12 } 13 for(int i=pre;i<=n;i++){ 14 a[s]=i;//每一種 15 search(n-i,s+1,i);//類似於遞歸,搜索下一種可能,若放滿則打印 16 } 17 } 18 int main(){ 19 int n; 20 cin>>n; 21 search(n,1,1); 22 return 0; 23 }