Problem Description 有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法?
Input 輸入數據首先包含一個整數N,表示測試實例的個數,然後是N行數據,每行包含一個整數M(1<=M<=40),表示樓梯的級數。 Output 對於每個測試實例,請輸出不同走法的數量 Sample Input 2 2 3
Sample Output 1 2 |
題意很明顯,沒什麼難懂的,我們可以假設如果我要上到第m級階梯,那我最後一步就有兩種可能,第一,我從第m-1級上到第m級,第二 我從第m-2級上到第m級,從第m-1 級和m-2級上到第m級都只有一種方法( 說m-2到m是兩種的自己再仔細想想),所有接下來就好辦了 話不多說,上代碼。(注意如果使用函數遞歸調用,可能會在某些限制下造成內存超限)
#include<iostream>
using namespace std;
int main ( )
{
int N, m, a[40], i;
cin >> N;
for ( i = 0; i < 40; i ++ )
{
if ( i == 0 || i == 1 )
{
a[i] = i + 1;
}
else a[i] = a[i-1] + a[i-2];
}
while ( N -- )
{
cin >> m;
cout << a[m-2] << endl;
}
return 0;
}