39級臺階
小明剛剛看完電影《第39級臺階》。離開電影院的時候,他數了數禮堂前的臺階數,恰好是39級!
站在臺階前,他突然又想着一個問題:
如果我每一步只能邁上1個或2個臺階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級臺階,有多少種不同的上法呢?
請你利用計算機的優勢,幫助小明尋找答案。
#include <iostream>
#include<stdio.h>
using namespace std;
int n,s;
int f(int q,int t)
{
if(q>0)t++; //有臺階可走
if(q>=2) return f(q-1,t)+f(q-2,t); //選擇走一步或者走兩步
if(t%2==0) s++; //q=0,1共走偶數步,方法加1
return 0;
}
int main()
{
while(scanf("%d",&n)!=EOF){
s=0;
f(n,0);
printf("%d\n",s);
}
return 0;
}
出棧順序
X星球特別講究秩序,所有道路都是單行線。
一個甲殼蟲車隊,共16輛車,按照編號先後發車,夾在其它車流中,緩緩前行。
路邊有個死衚衕,只能容一輛車通過,是臨時的檢查站,如圖所示。
X星球太死板,要求每輛路過的車必須進入檢查站,也可能不檢查就放行,也可能仔細檢查。
如果車輛進入檢查站和離開的次序可以任意交錯。那麼,該車隊再次上路後,可能的次序有多少種?
爲了方便起見,假設檢查站可容納任意數量的汽車。
顯然,如果車隊只有1輛車,可能次序1種;2輛車可能次序2種;3輛車可能次序5種。
#include <stdio.h>
int f(int n,int m)
{
if(n==0)
return 1;
if(m==0)
return f(n-1,1);
return
f(n,m-1)+f(n-1,m+1);
}
int main()
{
int a;
while(scanf("%d",&a)!=EOF){
printf("%d\n",f(a,0));
}
return 0;
}