兔子会死怎么办? 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,假如兔子会死
Key Words: 兔子会死 、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,假如兔死。。。。
1 兔子不会死
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子有多少对,第20个月有多少对?
1.1 斐波那契思想
程序分析: 第一个月、第二个月小兔子没有繁殖能力,所以还是1对 两个月后,生下一对小兔民数共有2对 三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是3对,依次类推可以列出下表兔子的规律为数列1,1,2,3,5,8,13,21…这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。 这个数列是意大利中世纪数学家斐波那契在<算盘全书>中提出的。
1.2 动态规划思想
由于第i项为第第i-1项加上第i-2项,即该数列满足:f[i] = f[i-1] + f[i-2] ,这里的条件是i大于2。求解第n个月的兔子总数问题,变为了求解第n-1个月的兔子总数 , 和第n-2个月的兔子总数,直到求解n, n-1,…, 2,1的问题,故可以使用DP来做该题, 实现比较简单:
定义状态:用f[i]表示了第i个月的兔子总数为f[i]
状态转移方程:f[i] = f[i-1] + f[i-2]
初始值和边界值: f[0] = f[1] = 1
计算方向:从左到右
编程实现:
def rabbitBirthNoDeath(n=20):f = [0 for i in range(n)]f[0] = f[1] = 1for i in range(2,n):f[i] = f[i-1] + f[i-2]print(f)
2 兔子会死
但是如果兔子会死怎么办? 因为我们大家都知道,兔子不可能无限繁殖,很多笔者都写了关于兔子不会死的情况,而对于兔子会死的场景,很少有人去考虑,笔者记得,在练习的时候就遇到过这个情况,即兔子会死的情况。今天就来彻彻底底的分析分析:
题目变种:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子寿命为半年,问每个月兔子有多少对,第20个月有多少对?
题目分析:假如兔子寿命为半年,说明了一只兔子的寿命为6个月,但问题来了,兔子在第6个月是先死还是先死了,为了不纠结这个问题,笔者直接定义为兔子先生, 生完兔子后在死,然后再计算总数。
兔子到第7个月时,才会有兔子真正死去。
在第7个月的兔子总数 = 在第6个月的兔子总数 + 在第5个月的兔子总数 - 在第1个月的兔子总数
形式化为: f[7] = f[6] + f[5] - f[1]
故当i<=6时,f[i] = f[i-1] + f[i-2]
故当i>6时, f[i] = f[i-1] + f[i-2] - 死去的兔子数量
所以该题的关键是如何计算死去的兔子数量
可以看到周期为6后,就会有兔子死去,故需要得到周期值
在通过取模运算得到具体的位置。就可以得到死去的兔子数量
代码实现:
def rabbitBirthDeath(n=20):f = [0 for i in range(n)]f[0] = f[1] = 1for i in range(2,n):# 如果兔子的寿命为6个月if (i < 6 ):f[i] = f[i-1] + f[i-2]else:k = i%6 #获取具体位置 在第k个位置period = int(i/6) -1 #在第period个周期f[i] = f[i-1] + f[i-2] - f[period*6+k]print(f)
3 结果对比
不会死:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
会死: [1, 1, 2, 3, 5, 8, 12, 19, 29, 45, 69, 106, 163, 250, 384, 589, 904, 1387, 2128, 3265]
兔子会死怎么办? 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,假如兔子会死相关推荐
- 【python进阶】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
古典问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 方法一:简单方法 month = int(input( ...
- C语言实现,古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可) 程序分析:兔子 ...
- 【C语言】题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?((输出前40个月) 题目分析: 由题意 ...
- 古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可) 先将前几个月的兔子数量 ...
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少(计算30个月的)?
public static void main(String[] args) {/** 9.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,* 假如 ...
- Java基础算法题(02):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
查看所有50道基础算法题请看: Java的50道基础算法题 递归的方法 package Demo02Rabbits; import java.util.Scanner; public class Ra ...
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子 ,假如兔子都不死,问每个月的兔子总数为多少
思路分析: 月份 兔子数 说明 1 1(对) 从开始有一对兔子 2 1 3 1+1 ...
- 【Java】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
需求: 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析: 这是一个斐波那契数列数列问题 同样 ...
- Java古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 由图可知, 第一个月是小兔子,是一对小兔子 第二个月从小兔子变成大 ...
- java题兔子第三个月生_JAVA编程之古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子...
问题是这样的:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子, 假如兔子都不死,问每个月的兔子总数为多少? 这个问题相信大家已经不在陌生了.很多博 ...
最新文章
- Leetcode-最长回文子串(5)
- 计算机结构原理初步教案板书设计,(计算机工作原理)教学设计(教案)
- pfSense-2.4.4安装教程
- alwayson高可用组_AlwaysOn可用性组–简化工作的好奇心–第1部分
- java 编写a-z输出,有1-26个数字和a-z字母,用Java多线程实现先输出2和数字再输出2个字...
- MYSQL误删数据恢复
- 数学:概率论与数理统计
- 信捷XD5程序+TG765触摸屏程序,功能为XY双轴排版机,带2个气缸
- 三年经验前端开发面试总结
- Java中对象的逃逸分析
- 在微型计算机系统中 视频适配器为,一级计算机基础知识整理解说.xls
- MNE-Python | 开源生理信号分析神器(一)
- Cocos精品《地下城堡2》:从挂机到RPG 唯有暗黑始终如一
- 1+3+5+....+99的和为
- 无线传感网络的自适应协作数据传输方法
- python引流_Python初学者也可以秒懂的Python For循环思维
- Studing Day2 - python基础2
- 第六章 Cesium学习入门之添加Geojson数据(dataSource)
- 关于电脑硬盘的二三事(SATA接口)
- 45个有用的JavaScript技巧,窍门和最佳实践
热门文章
- 一根网线两台电脑传输文件
- 2018北京网络赛B题 Tomb Raider
- ACM-ICPC2018北京网络赛 Tomb Raider(暴力)
- 【服务器托管单线、双线以及多线如何区别】
- 准确率(accuracy)、精确率(Precision)、召回率(Recall)
- 洛谷P1894 [USACO4.2]完美的牛栏The Perfect Stall
- open-flash-chart 与 FusionCharts 开发中使用(转)
- jQuery(一个JavaScript库)
- 库存管理系统的设计与实现(代码)
- qq输入法自定义短语并在手机qq输入法使用