题目
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房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;因此我们不难想到小蜜蜂的走法等于到达最后走数字加1位置的走法与最后走数字加2位置的走法之和;所以我们可以直接用递归做,这是一种思路。
另外,我们同样可以发现,这个题类似于阶梯问题,,每次只能走一步或者两步,相当于求从0到始末位置数字之差级阶梯的走法,直接用斐波那契数列做。
值得注意的是,斐波那契数列到下标为48时整型就已经存不下了,记得用长整型来存。
代码
#include <stdio.h>
int main()
{int n,a,b;long long int f[55];f[0]=1;f[1]=1;for(int i=2;i<55;i++){f[i]=f[i-1]+f[i-2];} scanf("%d",&n);while(n--){scanf("%d %d",&a,&b);printf("%lld\n",f[b-a]); }return 0;
}