/*HDU 2041 超级楼梯(2011-04-01 19:23:55)转载标签: it 分类: HDU
超级楼梯
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10760 Accepted Submission(s): 5417
Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
2 2 3
Sample Output
1 2
Problem Analyse
简单递推
Algorithm Analyse
由题目可知,每次只能走一级或两级。
因此从第一级走上第二级只能走一步,只有1种走法。
从第一级走上第三级,可以从第一级直接走两步,也可以从第二级走一步。有2种走法
走上第n级,可以从第n-1级走一步上来,也可以从第n-2级走两步上来。
即:
f(2) = 1
f(3) = 2
f(n) = f(n-1) + f(n-2) (n > 3)
是一个斐波那契函数。
*/
//简单的递归
#include <stdio.h>
void main()
{
int i;
int count,x;
int a[40]={1,1,2};
for(i=3;i<40;i++)
{
a[i]=a[i-1]+a[i-2] ;
}
scanf("%d",&count);
while(count--)
{
scanf("%d",&x);
printf("%d\n",a[x-1]);
}
}
#include <iostream>
using namespace std;
int f[41]={0,1};
int main()
{
int i,n,m;
for(i=2;i<41;++i)
f[i]=f[i-1]+f[i-2];
for(scanf("%d",&n);n--;){
scanf("%d",&m);
printf("%d/n",f[m]);
}
return 0;
}