算法導論-遞推公式-HDOJ2041

Problem Description
有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法?
 

Input
輸入數據首先包含一個整數N,表示測試實例的個數,然後是N行數據,每行包含一個整數M(1<=M<=40),表示樓梯的級數。
 

Output
對於每個測試實例,請輸出不同走法的數量
 

Sample Input
2 2 3
 

Sample Output
1 2
 
這道題目一下把我難住了,從頭到尾想實在是很難解決,換種思路就很簡單了。
代碼如下:
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;

/*
當你到達第n階的時候有兩種到達方式。 在n-1處上 1個樓梯。在n-2處上2個樓梯。。
所以上N階樓梯的情況總數=上n-1的總數+上n-2的總數
這樣遞推公式就出來了。。
f(n)=f(n-1)+f(n-2)
這種算法很常見,以後一定要注意!
*/

int main()
{
    int i,n,T,s[42];
    s[1]=1;
    s[2]=2;
    scanf("%d", &n);
    while(n--)
    {
        scanf("%d",&T);
        if(T==1||T==2||T==3)
        {
            printf("%d\n",T-1);
            continue;
        }
        for(i=3;i<=T;i++)
        {
            s[i]=s[i-1]+s[i-2];
        }
        printf("%d\n",s[T-1]);
    }

    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章