一只小蜜蜂(C ++ && 详解 )

老规矩, 先看题。

有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
 

Input

输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。

Output

对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。

Sample

InputcopyOutputcopy
2 
1 2 
3 6 
1 
3

这道题也是一道水题, 但是我还是选择说一下他的思想, 毕竟我就差点没看出来

看完题之后我们可以试着列举一下情况

从1到2和从2到3, 答案都是1。

从1到3和从2到4, 答案也是一样的, 所以答案和两个数字没有关系, 而是和他们的差有关

既然这样, 我们就开始分析

如果差为1, 答案为1

如果差为2, 答案为2

如果差为3, 答案为3

如果差为4, 答案为5

如果差为5, 答案为8.......

既然这样, 那就开始找规律 (1, 2, 3, 5, 8, 13......)

如果这样看没有感觉的话那就在这串数之前加一个1(1, 1, 2, 3 ,5, 8, 13.......)

这时候就已经很明显了, 没错, 这就是斐波那契数列。

这道题就转化成了求斐波那契数列。

话不多说, 上代码。

#include <iostream>

using namespace std;

int T;

int main()
{
	long long ans[50];
	ans[0] = 1, ans[1] = 1;
	for(int i = 2; i < 50; i ++ ) ans[i] = ans[i - 1] + ans[i - 2];
	
	int a, b;
	scanf("%d", &T);
	while(T -- )
	{
		scanf("%d%d", &a, &b);
		printf("%lld\n", ans[b - a]);
	}
	
    return 0;
}

这道题就结束了, 那么最后祝大佬们天天AK!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值