超级楼梯
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 61658 Accepted Submission(s): 31631
Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
2 2 3
Sample Output
1 2
Author
lcy
Source
Recommend
lcy | We have carefully selected several similar problems for you: 2044 2045 2046 2050 2042
思路 :
建议 把前几层数比较小的情况输出 然后就会发现规律。
实际上 是一个斐波那契数列的一种模拟
Code:
/*
超级楼梯
*/
#include <iostream>
using namespace std;
typedef long long ll;
ll f(ll n) {
if (n==1) return 0;
if (n==2) return 1;
if (n==3) return 2;
return f(n-1)+f(n-2);
}
// 调用递归超时!!!!!!!!!
int main()
{
/* int n;
ll m;
cin>>n;
for (int i=1;i<=n;i++) {
cin>>m;
cout<<f(m)<<endl;
} */ // 一开始调用递归超时了 。
int arr[41]={0,1,2};
for (int i=3;i<41;i++) {
arr[i]=arr[i-1]+arr[i-2];
}
int n,m;
cin>>n;
while (n--) {
cin>>m;
cout<<arr[m-1]<<endl;
}
return 0;
}
提交代码