Problem Description
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
其中,蜂房的结构如下所示。
Input
输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。
Output
对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
Sample Input
2 1 2 3 6
Sample Output
1 3暑假前做过的,今天用递归去提交,结果发现有超时了。还是老办法;思路分析:小蜜蜂从1到2,有1-2一条路,从1到3有1-3,1-2-3两条路,从1到4有1-2-4,1-3-4,1-2-3-4三条路,从1到5有1-3-5,1-3-4-5,1-2-4-5,1-2-3-5,1-2-3-4-5,五条路;得出结果,相差1时一条,相差2时两条,相差3时三条,相差4时五条。即有斐波那契数列f(1)=1,f(2)=2;f(n)=f(n-1)+f(n-2);#include<stdio.h> /*int f(int n) { if(n==1) return 1; if(n==2) return 2; return f(n-1)+f(n-2); }*/ int main() { int n; __int64 a,b; __int64 x,y; __int64 t,i,sum; scanf("%d",&n); while(n--) { sum=0; scanf("%I64d%I64d",&a,&b); x=1;y=2; t=b-a; if(t==1) {printf("1\n"); continue;} if(t==2) {printf("2\n"); continue; } for(i=3;i<=t;i++) { sum=x+y; x=y; y=sum; } printf("%I64d\n",sum); } return 0; }