劍指OFFER之變態跳臺階(九度OJ1389)

題目描述:

一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級……它也能夠跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。測試

 

輸入:

輸入可能包含多個測試樣例,對於每一個測試案例,spa

輸入包括一個整數n(1<=n<=50)。code

 

輸出:

對應每一個測試案例,blog

輸出該青蛙跳上一個n級的臺階總共有多少種跳法。io

 

樣例輸入:

6

 

樣例輸出:

32

解題思路:

  這道題目跟以前的跳臺階大同小異,只是跳臺階的階數從1變到了n,也就是說,再也不是跳一下或者跳兩下的問題,而是跳n下的問題。那麼解題的思路顯然還得逆向分析,咱們發現:class

  每一個最終臺階均可以一步跳上去,也能夠從他的前一個臺階跳一下上去,也能夠從他的前兩個臺階跳兩個臺階上去。那麼總結髮現:循環

  最後剩下的臺階數,加上以前的跳臺階的方法,便可。即:方法

  最後剩下零個臺階,暫且定爲0,直接跳n個臺階上來,顯然只有一種方法,咱們每次循環首先自加1就好了。總結

  最後剩下1個臺階,那麼共有(第n-1個臺階的方法數)種;di

  最後剩下2個臺階,共有(第n-2個臺階的方法數)種;

  ....

  最後剩下n-1個臺階,只有一種方法。

  把上面的方法累加起來,既是跳到第n階臺階的數目

代碼:

 

#include <stdio.h>
long long int arr[51] = {0,1}; void createArr(void); int main(void){ int n; createArr(); while(scanf("%d",&n)!=EOF && n>=1 && n<=50){ printf("%lld\n",arr[n]); } return 0; } void createArr(void){ int i,j; for(i=2;i<51;i++){ j=i-1; arr[i]++;//直接跳躍到自己的
        while(j){ arr[i] += arr[j]; j--; } } }
相關文章
相關標籤/搜索