第39級臺階

題目標題: 第39級臺階


    小明剛剛看完電影《第39級臺階》,離開電影院的時候,他數了數禮堂前的臺階數,恰好是39級!
    站在臺階前,他突然又想着一個問題:
    如果我每一步只能邁上1個或2個臺階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級臺階,有多少種不同的上法呢?
    請你利用計算機的優勢,幫助小明尋找答案。
要求提交的是一個整數。

注意:不要提交解答過程,或其它的輔助說明文字。


這道題目具有兩隻算法,非遞歸算法和遞歸算法。

非遞歸算法:

#include <iostream>
using namespace std;
 
long step[40][2];
//step[i][0]表示走到第i個臺階式最後一步邁的是左腳 
//step[i][1]表示走到第i個臺階式最後一步邁的是右腳 
 
int main()
{
    step[0][0] = 0;
	step[1][1] = 0;
    step[0][1] = 1;
	step[1][0] = 1;
    for(int i = 2; i <= 39; i++)
	{
        step[i][0] = step[i - 1][1] + step[i - 2][1];
        step[i][1] = step[i - 1][0] + step[i - 2][0];
    }
    cout << step[39][1];//最有一步邁的是右腳 
    return 0;
}

遞歸算法:

#include <iostream>
using namespace std;  
  
long ans = 0;  
void dfs(int sum,int step)   
{  
    if(sum<0)   return ;  
    if(step%2 == 0 && sum == 0)  //如果走完臺階而且步數爲偶數則算爲一種走法 
    {  
	    ans++;  
	    return ;  
    }  
    for(int i = 1;i<=2;i++)  //下一步可有走一步或者兩步 
    	dfs(sum-i,step+1);  
}  
  
int main()  
{  
    dfs(39,0);  
    cout << ans ;
    return 0;  
}


發佈了74 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章