1. 程式人生 > >自然數的拆分(DFS)

自然數的拆分(DFS)

aps spa lose ron pen 輸出格式 輸入格式 加法 void

題目描述:

任何一個大於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 }
View Code

自然數的拆分(DFS)