hdu超级楼梯2014

 

/*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; 

你可能感兴趣的:(hdu超级楼梯2014)