原题目:
思考了很久一直没有结论,在网上调查了一下发现可以使用递归的方式来解决。
主要思路:
对于任意的第M级阶梯,有以下两种策略来达到:
- 从M-1级走一步到M级
- 从M-2级走两步到M级
分析上述两种方式,发现到M级的走法其实就是M-1级和M-2级的走法的和。(事后发现完全就是兔子数列_(:з)∠)_,不过递归超时了,就写成了数列的形式。)
源代码:
#include <iostream>
using namespace std;
int main()
{
int n;
int x;
unsigned long long int number[100];
unsigned long long int cal[100];
cal[1] = 1;
cal[2] = 1;
for(int i = 3; i <= 40; i++)
{
cal[i] = cal[i-1] + cal[i-2];
}
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%d",&x);
number[i] = cal[x];
}
for(int i = 0; i < n; i++)
{
printf("%llu\n",number[i]);
}
return 0;
}