一、题目
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。
Input:
输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数 a 和 b (0 < a < b < 50)。
Output:
对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
Inputcopy:
2
1 2
3 6
Outputcopy:
1
3
二、方法一
1、思路
这个题其实就是典型的斐波那契数列。
1 ~ 2(1):1 ~ 2
1 ~ 3(2):1 ~ 2 ~ 3,1 ~ 3
1 ~ 4(3):1 ~ 2 ~ 3 ~ 4,1 ~ 2 ~ 4,1 ~ 3 ~ 4
…
1 ~ n:(1 ~ n - 1)+(1 ~ n - 2)
2、代码
#include<stdio.h>
#include<string.h>
#define max 55
int n, a, b;
int i, j, k;
long long dp[max];
void func()
{
dp[2] = 1;
dp[3] = 2;
for (i = 4; i <= 55; i++)
{
dp[i] = dp[i - 1] + dp[i - 2];
}
}
int main()
{
func();
scanf("%d", &n);
while (n--)
{
scanf("%d %d", &a, &b);
printf("%lld\n", dp[b - a + 1]);
}
return 0;
}