Problem Description
有一只經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請編程計算蜜蜂從蜂房a爬到蜂房b的可能路線數。
其中,蜂房的結構如下所示。
其中,蜂房的結構如下所示。
Input
輸入數據的第一行是一個整數N,表示測試實例的個數,然後是N 行數據,每行包含兩個整數a和b(0<a<b<50)。
Output
對於每個測試實例,請輸出蜜蜂從蜂房a爬到蜂房b的可能路線數,每個實例的輸出佔一行。
Sample Input
2
1 2
3 6
1 2
3 6
Sample Output
1
3
3
分析
從1-2有1種方法,從1-3可以由1-3或1-2-3,總共2種,由1-4可由1-2-3-4或1-3-4或1-2-4總共3種,可以這樣想:
想到達4必需到達3或2,然後計算到達3或2的所有路線,加起來就是所有的路線數,f(4)=f(3)+f(2);由此可以想到斐波那契數列(可參考百度百科斐波那契數列_百度百科
http://baike.baidu.com/link?url=s4co2IxRtz0Dt7gLD5B0MXMoz2K1rxWeM4rtkQtNxA_bFK3kOzrlOkDdOZNY4RiK)
用斐波那契數列的方法做即可 f(n)=f(n-1)+f(n-2)
代碼
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,i,j,c,b,m;
_int64 a[51];//VC下的64位整數
while(cin>>n)
{
for(i=0;i<n;i++)
{
cin>>b>>c;
m=c-b;
a[1]=1;
a[2]=2;
for(j=3;j<=m;j++)
a[j]=a[j-1]+a[j-2];
printf("%I64d\n",a[m]);
}
}
return 0;
}
#include<stdio.h>
using namespace std;
int main()
{
int n,i,j,c,b,m;
_int64 a[51];//VC下的64位整數
while(cin>>n)
{
for(i=0;i<n;i++)
{
cin>>b>>c;
m=c-b;
a[1]=1;
a[2]=2;
for(j=3;j<=m;j++)
a[j]=a[j-1]+a[j-2];
printf("%I64d\n",a[m]);
}
}
return 0;
}