1.走楼梯 时间限制: C/C++ 1000ms; Java 2000ms 内存限制: 65535KB 通过次数: 34 总提交次数: 94
问题描述 有一楼梯共M级,刚开始时你在第零级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
输入描述 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
输出描述 对于每个测试实例,请输出不同走法的数量
样例输入 2 3 4 样例输出 3 5
#include<stdio.h>
int count=0,m;
int main(){
int n;
scanf("%d",&n);
bool dfs(int i);
for(int i=0;i<n;i++){
count=0;
scanf("%d",&m);
dfs(0);
printf("%d\n",count);
}
return 0;
}
bool dfs(int i){
if(i==m) count++;
if(i>m) return 0;
dfs(i+1);
dfs(i+2);
}
注意:这个会超时,m=40时,2的40很大。 观察规律,这是一个斐波那契数列。
#include<stdio.h>
int main(){
int n,m;
int fb(int i);
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&m);
printf("%d\n",fb(m));
}
return 0;
}
int fb(int i){
if(i==1) return 1;
else if(i==2) return 2;
else return fb(i-1)+fb(i-2);
}
在比赛中学会寻找规律,优化算法,是我们acm实验室成员必不可少的技能。
|