一隻青蛙一次能夠跳上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--; } } }