剣指OFFERの踊り場(九度OJ 1388)

3139 ワード

タイトルの説明:


1匹のカエルは一度に1段の階段を飛び上がることも、2段を飛び上がることもできます.このカエルが1つのn級の階段を跳ぶことを求めて全部で何種類の跳び方があります.

入力:


入力には、各テストケースについて、複数のテストケースが含まれる場合があります.
入力は整数n(1<=n<=70)を含む.
 

出力:


各テストケースに対応し、
出力カエルがn段の階段を飛び上がるのに何種類の飛び方があるのか.
 

サンプル入力:


5

サンプル出力:


8

テーマ分析:


この問題は明らかに順方向分析ではだめだ.つまり、一番後ろの階段は、前の階段に依存しなければならない.したがって,最後のステップの方法数は前から計算できる.では、よく考えてみると、カエルは1~2歩しか踊れません.つまり、最後の階段は前の階段か前の2つの階段で上がったに違いありません(このとき階段の数が長いと仮定します).最後のステップに達する方法の数は、前のステップの方法の数と前の2つのステップの方法の数に等しいことが明らかになった.ここでは、これは典型的なフィボナッチ数列であることが分かった.問題はよく解決して、前の問題の構想の上で見て、受けなければならない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
",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 ****************************************************************/