閱讀984 返回首頁    go 阿裏雲 go 技術社區[雲棲]


2013藍橋杯【初賽試題】第39階台階

第39階台階
小明剛剛看完電影《第39級台階》,離開電影院的時候,他數了數禮堂前的台階數,恰好是39級!
 站在台階前,他突然又想著一個問題:
 如果我每一步隻能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多

少種不同的上法呢?
 請你利用計算機的優勢,幫助小明尋找答案。

要求提交的是一個整數。
注意:不要提交解答過程,或其它的輔助說明文字。

 

思路:(原先用斐波那契額真是大錯特錯.....)這一題的重點是偶數步(先邁左右腳是幹擾),因為隻有39個台階,

數據量不大,我們可以選擇遞歸,每次加1步或2步,每次判斷台階總數是否滿39,滿了的話判斷
AC代碼:

#include<stdio.h>    
int Sum=0;  
//sidestep是剩餘的台階數
//step是走上麵這些台階用了多少步 
void Total(int sidestep,int step)  
{   
     if(sidestep<0) return;   //台階走完函數結束

     if(sidestep==0)   //台階全部走完   
     {  
        if(step%2 == 0) Sum++;  //如果總步數是偶數,方法數加1
        return;  
     }   
     
     //分別是走一步和走兩步的方法向下遞歸
     Total(sidestep-1,step+1);   
     Total(sidestep-2,step+1);   
}  
int main()  
{
    Total(39,0);  
    printf("%d\n",Sum);
    return 0;   
}  

結果為:51167078步


最後更新:2017-04-03 12:55:21

  上一篇:go 九度 1493:公約數
  下一篇:go Cmd IIS 重啟