蓝桥杯 试题 算法提高 研究兔子的土豪

文章描述了一道编程题目,涉及到兔子繁殖的斐波那契数列问题。HWD老师研究兔子繁殖,每代兔子数量遵循斐波那契数列增长,但因买家要求,每批只能出售1007只。题目要求计算繁殖一定代数后剩余的兔子数,通过斐波那契数列的循环节来优化计算。解答中包含对斐波那契循环节的理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

试题 算法提高 研究兔子的土豪

资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  某天,HWD老师开始研究兔子,因为他是个土豪
  ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大笼子(好像比我们伟大的地球母亲大一点点?),并开始研究它们,之后,他了解了兔子的繁衍规律:即fibonacci数列。
  兔子繁殖了n代后,HWD老师很开心。
  但是,HWD老师有密集恐惧症,所以,他只能去卖了兔子,他找到了一个好的雇主,但是这个雇主有强迫症,他只每次收购1007只兔子,HWD老师为了避免自己的密集恐惧症,要尽量多的卖了兔子。
  但是即便是密集恐惧症,也打击不了HWD老师研究兔子的决心,他数着数着自己剩下的兔子……

输入格式

  HWD老师让兔子繁衍了几代(一个整数,没有其他字符)。

输出格式

  HWD老师剩余(残余?)的兔子(一个整数,忽略行尾回车及空格)。

样例输入

1

样例输出

1

数据规模和约定

  兔子的总量最大时小于HWD老师笼子的大小。
  f[1]=1,f[2]=1,f[3]=2 ……

本题解析已放在代码中,请看下方具体代码:

#include <iostream>
using namespace std;
int main()
{
	long long int n,f[10000]={0,1,1},rand=0;//这里数组f用于存储每一月的兔子数量,第一天第二天兔子数量均为1
	cin>>n;
	for(int i=3;i<=n;i++)
	{
		f[i]=f[i-1]+f[i-2];//兔子的繁衍规律:即fibonacci数列,那么我们只管使用这个规律即可,不需要考虑兔子卖后的其他因素
		f[i]=f[i]%1007;//这里取1007的余,相当于当兔子数量超过1007,就卖出1007只
		if(f[i-1]==1 && f[i]==1)//这里涉及斐波那契循环节,大家可以理解为在一个斐波那契数列中如果对每一个数据都取一个固定值的余,那么斐波那契数列中存在循环周期
		{//由于第一个月和第二个月都为1,那么斐波那契数循环节的循环开头始终为第一个数和第二个数均为1,这时我们找出这段循环范围即可
			rand=i-2;
			break;
		}
	}
	if(rand!=0)//如果找出循环节,那么就对n取余,获取其相当于在第一个循环节的数
	{
		n=n%rand;
	}
	cout<<f[n];//最终输出f[n]
	return 0;
}

该题涉及斐波那契循环节,请大家自行查阅(我只能说数学总是与算法密不可分,真是太难了!)

欢迎大家留言评论,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值