nowcoder利用业余时间养了一窝蜜蜂,因为空间比较小,蜂房只有两排,如下图所示:
如你所见,蜜蜂的蜂房是正六边形,假设蜜蜂只会从左往右爬,即从1号蜂房能爬到2号和3号;从6号蜂房能爬到7号和8号……现给出两个蜂房的编号a和b,要求计算蜂房a的蜜蜂爬到蜂房b有几条不同路线。
- 输入的第一行是一个整数n
2. 接下来n行数据,每行一组测试用例
3. 每组测试用例包含两个正整数a和b,(0 < a < b < 2^31)
输入例子
3
1 2
3 6
99 100
输出例子
1
3
1
理解的方法还是一样,比如要到第5个蜂窝,从最近只能从第3个蜂窝和第4个蜂窝进入,由此看出f(n)=f(n-1)+f(n-2),所以是个斐波那契数列。
#include<cstdio>
typedef long long ll;
const int m = 103;
ll f[m]={1,1,2};
int main(int argc,char const *argv[]){
for(int i=3;i<m;i++){
f[i]=f[i-1]+f[i-2];
}
int n;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
printf("%lld\n",f[b-a]);
}
}
return 0;
}