C語言 · 出棧次序

標題:出棧次序瀏覽器

    X星球特別講究秩序,全部道路都是單行線。一個甲殼蟲車隊,共16輛車,按照編號前後發車, 夾在其它車流中,緩緩前行。spa

    路邊有個死衚衕,只能容一輛車經過,是臨時的檢查站,如圖【p1.png】所示。code

    X星球太死板,要求每輛路過的車必須進入檢查站,也可能不檢查就放行,也可能仔細檢查。blog

    若是車輛進入檢查站和離開的次序能夠任意交錯。那麼,該車隊再次上路後,可能的次序有多少種?string

    爲了方便起見,假設檢查站可容納任意數量的汽車。io

    顯然,若是車隊只有1輛車,可能次序1種;2輛車可能次序2種;3輛車可能次序5種。class

    如今足足有16輛車啊,親!須要你計算出可能次序的數目。方法

    這是一個整數,請經過瀏覽器提交答案,不要填寫任何多餘的內容(好比說明性文字)。di

 

方法一:co

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 int main(){
 5     int sum=0;
 6     int f[17];
 7     memset(f,0,sizeof(f));//注意要賦初值 
 8     f[0]=1;
 9     f[1]=1;
10     f[2]=2;
11     f[3]=5;
12     for(int i=4;i<=16;i++){
13         for(int j=0;j<=i-1;j++){
14             f[i]+=f[j]*f[i-1-j];
15         }
16     }
17     printf("%d",f[16]);
18     return 0;
19 }

方法二:

 1 #include<stdio.h>
 2 int ans=0; 
 3 void dfs(int n,int r,int i){
 4     if(n==32){
 5         ans++;
 6         return;
 7     }
 8     if(r>i){
 9         if(r<16){
10             dfs(n+1,r+1,i);
11         }
12         if(i<16){
13             dfs(n+1,r,i+1);
14         }
15     }else{
16         if(r==i){
17             if(r<16){
18                 dfs(n+1,r+1,i);
19             }
20         }
21     }
22     return;
23 }
24 int main(){
25     dfs(0,0,0);
26     printf("%d",ans);
27     return 0;
28 }
相關文章
相關標籤/搜索