題目:超級(jí)樓梯
Problem Description:
有一樓梯共M級(jí),剛開始時(shí)你在第一級(jí),若每次只能跨上一級(jí)或二級(jí),要走上第M級(jí),共有多少種走法?
Input:
輸入數(shù)據(jù)首先包含一個(gè)整數(shù)N,表示測(cè)試實(shí)例的個(gè)數(shù),然后是N行數(shù)據(jù),每行包含一個(gè)整數(shù)M(1<=M<=40),表示樓梯的級(jí)數(shù)。
Output:
對(duì)于每個(gè)測(cè)試實(shí)例,請(qǐng)輸出不同走法的數(shù)量
Sample Input
2
2
3
Sample Output
1
2
自己的思路:從開始就理解錯(cuò)了題目,會(huì)錯(cuò)了意,題目開始就是站在第一層臺(tái)階往上跨直到目標(biāo)樓梯階層,接著又理解錯(cuò)了題目的規(guī)則,題目要上樓梯是跨一級(jí)或兩級(jí)臺(tái)階這樣交替的,那么當(dāng)你到達(dá)第n階的時(shí)候有兩種到達(dá)方式。 在n-1處上 1個(gè)樓梯。在n-2處上2個(gè)樓梯。
明白之后就是一個(gè)遞歸,原理就是在踏上n層時(shí),把之前n-1和n-1踏過的方法相加,就是可供踏上第n層的總方法。
源代碼:
#include <stdio.h>
int main(void)
{
? ? int n, number;
? ? int a[41] = {0};
? ? a[1] = 1;
? ? a[2] = 1;
? ? int i;
? ? while(scanf("%d",&n)!=EOF)
? ? while(n--)
? ? {
? ? ? ? scanf("%d",&number);
? ? ? ? if(number == 1|| number == 2)
? ? ? ? printf("1\n");
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? for(i=3;i<=number;i++)
? ? ? ? {
? ? ? ? ? ? if(a[i]==0)
? ? ? ? ? ? a[i] = a[i-1] + a[i-2];
? ? ? ? }
? ? ? ? printf("%d\n",a[number]);
? ? ? ? }
? }
}