老规矩, 先看题。
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
Input
输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。
Output
对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
Sample
Inputcopy | Outputcopy |
---|---|
2 1 2 3 6 | 1 3 |
这道题也是一道水题, 但是我还是选择说一下他的思想, 毕竟我就差点没看出来
看完题之后我们可以试着列举一下情况
从1到2和从2到3, 答案都是1。
从1到3和从2到4, 答案也是一样的, 所以答案和两个数字没有关系, 而是和他们的差有关
既然这样, 我们就开始分析
如果差为1, 答案为1
如果差为2, 答案为2
如果差为3, 答案为3
如果差为4, 答案为5
如果差为5, 答案为8.......
既然这样, 那就开始找规律 (1, 2, 3, 5, 8, 13......)
如果这样看没有感觉的话那就在这串数之前加一个1(1, 1, 2, 3 ,5, 8, 13.......)
这时候就已经很明显了, 没错, 这就是斐波那契数列。
这道题就转化成了求斐波那契数列。
话不多说, 上代码。
#include <iostream>
using namespace std;
int T;
int main()
{
long long ans[50];
ans[0] = 1, ans[1] = 1;
for(int i = 2; i < 50; i ++ ) ans[i] = ans[i - 1] + ans[i - 2];
int a, b;
scanf("%d", &T);
while(T -- )
{
scanf("%d%d", &a, &b);
printf("%lld\n", ans[b - a]);
}
return 0;
}
这道题就结束了, 那么最后祝大佬们天天AK!