算法---兔子生小兔子
来源:互联网 发布:淘宝小积分抽大奖 编辑:程序博客网 时间:2024/04/27 18:58
算法—兔子生小兔子
题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:
兔子的规律为数列:1, 1, 2, 3, 5, 8, 13, 21 ….
分析:
这道题表现的本质就是斐波那契数列 f(0)=0,f(1)=1…f(n)=f(n-1)+f(n-2) (当前项等于前两项之和)。
兔子总对数 = 成年兔子对数+幼年兔子对数
成年兔子对数 = 前月成年兔子对数+前月幼年兔子对数 = 前月总对数
幼年兔子对数 = 前月成年兔子对数 = 大前月兔子总对数(由上条公式得到)
最终推导公式:兔子总对数 = 前月兔子总对数+大前月兔子总对数! 这个公式正好符合Fibonacci数列
void rabitFibonacci(){ long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制输出,每行四个*/ f1=f1+f2;/*前两个月加起来赋值给第三个月*/ f2=f1+f2;/*前两个月加起来赋值给第三个月*/ }}
递归算法
因为每对兔子从出生到生产的过程是一致的,所以我考虑是不是封装一个方法来表示兔子的这一过程,然后用递归实现
//递归实现 返回第一对兔子和之后所有小兔子生下的总兔子对数int rabits(int month){ int r = 0; for(int i=2;i<=month;i++){ r+=rabits(month-i);//从第3个月起每个月生一堆兔子 } return 1 + r;//这只兔子升的小兔子的总对数}
这个方法我认为从解决问题的角度不失为一个好方法。但对规律问题考虑不深入,也属于就事论事。
转载自>http://www.jianshu.com/p/84fd57ddbab7
阅读全文
0 0
- 算法---兔子生小兔子
- 大兔子生小兔子问题
- java 兔子生小兔子代码
- 大兔子和小兔子
- 大兔子,中兔子,小兔子
- 兔子吧, 第一个月一对, 三个月后开始生小兔子, 每月一对, 小兔子三个月后又生小兔子... ^_^
- Java面向对象方式(观察者模式)解决菲波拉契数列问题(兔子三岁后就可以生小兔子)
- 老问题新解法——经典的大兔子生小兔子问题(斐波那契数列)
- 小兔子
- * 有一对兔子,从出生后第3个月起每个月都生一对兔子,这对小兔子长到第三个月后每个月又生一对 * 小兔子,如此循环下去。假如兔子都不死,问,两年内,每个月的兔子有多少对? * @author A
- 【OpenJ 2987】T3 小兔子捡金币(小金币捡兔子)
- 递归算法问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不会死。问: 第20个月的兔子总对数为多少?(提示:先分析兔子的增长规律)
- 小兔子故事集锦
- 古典小兔子问题
- 有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?递归函数解决
- 【js初学】javascript经典算法之有一对兔子,从出生3个月起每个月都出生一对兔子,小兔三个月以后出生一对兔子,假设兔子不死,一年后有多少兔子
- 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子
- 斐波那契数列(生小兔子问题)
- 操作系统:线程
- Visual Studio 2010打开高版本项目的解决方法
- 想要向一个数组中每隔两个字符插入一个“*”,为什么输出不了结果(Visual Studio 2017)
- PAT1064 朋友数(20)
- Oracle之分析函数
- 算法---兔子生小兔子
- Unity3d UnityEditor编辑器定制和开发插件
- poj 1243 反恐训练营 动态规划 最长公共子序列
- Radar Installation POJ
- Java编码规范
- 关于Q群-昌盛街街民联合会的第一次全体群成员会议的公报
- 第九周
- 2017嵌入式软件行业现状及概述
- JavaWeb学习笔记-XML-2