劍指OFFER之跳臺階(九度OJ1388)

題目描述:

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

輸入:

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

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

 

輸出:

對應每一個測試案例,blog

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

 

樣例輸入:

5

樣例輸出:

8

題目分析:

  這道題很明顯正向分析是不行的,也就是說,最後面的一個臺階,要依賴於前面臺階的。因此,最後一個臺階的方法數目能夠由前面計算出來。那麼,仔細想一下,一個青蛙只能跳1-2步,也就是說,最後一個臺階確定是由它的前一個臺階或者前兩個臺階上去的(假設這個時候臺階數目很長)。那麼很顯然,到達最後一個臺階的方法數目等於前一個臺階的方法數目加上前兩個臺階的方法數目,到這裏咱們發現這是一個很典型的斐波那契數列。問題就好解決了,從前一道題的思路上看,要接的兩個問題:
  1 不要超時
  2 注意數據的格式,long long 輸出時使用%lld

代碼

#include <stdio.h>
long long stair[71]; void getStair(void); int main(){ int n; getStair(); while(scanf("%d",&n) != EOF && n>=1 && n <= 70){ printf("%lld\n",stair[n]); } return 0; } void getStair(void){ int i; stair[0] = 1; stair[1] = 1; for(i=2;i<71;i++){ stair[i] = stair[i-1]+stair[i-2]; } } /************************************************************** Problem: 1388 User: xhalo Language: C Result: Accepted Time:0 ms Memory:916 kb ****************************************************************/
相關文章
相關標籤/搜索