int num(int count){
if(count>2)
return (num(count-1)+num(count-2));
else
return count;
}
int main() {
int N,a[50],b[50],count;
int i=0,j=0,roads;
scanf("%d",&N);
//INPUT
for(i=0;i<N;i++){
scanf("%d%d",&a[i],&b[i]);
if( 0<a[i] && a[i]<b[i] && b[i]<50)
continue;
else
i--;
}
//OUTPUT
for(j=0;j<N;j++){
count=b[j]-a[j];
roads=num(count);
printf("%d\n",roads);
}
return 0;
}
如苏小喵的给的那个网址。
如果a-b的绝对值相同的话,线路数是相同的,类似是一种情况
如果绝对值是1路线数是1 如果是2 路线数是2 如果是3 路线数是3.....
有两个位置可以走到最后一个位置,那么走到最后一个位置的路线数就是走到这两个位置的路线数的和,
递推过程出来了,递推公式很容易写出:
F(i) = F(i-1) + F(i-2)
这不就是一个斐波那契数列么?
先提前做好一个斐波那契数列的数组F,然后直接输出F[b-a]就OK了。