39級臺階問題

39級臺階問題

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

#include<stdio.h>

int count=0;        //記錄有多少種
int foot=0;     //記錄走的步數

void backtrack(int t)   //傳值:走的臺階數
{
    if(t==39 && foot%2==0)      //條件:上完39級臺階,一共要邁偶數步
    {
        count++;        //增加一種方法
        return;
    }

    foot++;     //一步走一個臺階的情況
    t++;
    if(39>=t)   //減枝
        backtrack(t);
    t--;
    foot--;

    foot++;     //一步走一個臺階的情況
    t+=2;
    if(39>=t)   //減枝
        backtrack(t);
    t-=2;
    foot--;
}

int main()
{
    backtrack(0);
    printf("一共有%d種方法。\n",count);
    return 0;
}

/*
思路:
  回溯一步走一個臺階的情況和一步走一個臺階的情況。
  截止條件:走39臺階,步數爲偶數步。
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章