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;
}