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个月起每个月都生一对兔子,假如兔子会死相关推荐

  1. 【python进阶】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    古典问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 方法一:简单方法 month = int(input( ...

  2. C语言实现,古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

    题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可) 程序分析:兔子 ...

  3. 【C语言】题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?((输出前40个月) 题目分析: 由题意 ...

  4. 古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

    古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可) 先将前几个月的兔子数量 ...

  5. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少(计算30个月的)?

    public static void main(String[] args) {/** 9.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,* 假如 ...

  6. Java基础算法题(02):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    查看所有50道基础算法题请看: Java的50道基础算法题 递归的方法 package Demo02Rabbits; import java.util.Scanner; public class Ra ...

  7. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子 ,假如兔子都不死,问每个月的兔子总数为多少

    思路分析: 月份          兔子数                  说明 1      1(对)            从开始有一对兔子 2      1 3      1+1        ...

  8. 【Java】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    需求: 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析: 这是一个斐波那契数列数列问题 同样 ...

  9. Java古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 由图可知, 第一个月是小兔子,是一对小兔子 第二个月从小兔子变成大 ...

  10. java题兔子第三个月生_JAVA编程之古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子...

    问题是这样的:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子, 假如兔子都不死,问每个月的兔子总数为多少? 这个问题相信大家已经不在陌生了.很多博 ...

最新文章

  1. Leetcode-最长回文子串(5)
  2. 计算机结构原理初步教案板书设计,(计算机工作原理)教学设计(教案)
  3. pfSense-2.4.4安装教程
  4. alwayson高可用组_AlwaysOn可用性组–简化工作的好奇心–第1部分
  5. java 编写a-z输出,有1-26个数字和a-z字母,用Java多线程实现先输出2和数字再输出2个字...
  6. MYSQL误删数据恢复
  7. 数学:概率论与数理统计
  8. 信捷XD5程序+TG765触摸屏程序,功能为XY双轴排版机,带2个气缸
  9. 三年经验前端开发面试总结
  10. Java中对象的逃逸分析
  11. 在微型计算机系统中 视频适配器为,一级计算机基础知识整理解说.xls
  12. MNE-Python | 开源生理信号分析神器(一)
  13. Cocos精品《地下城堡2》:从挂机到RPG 唯有暗黑始终如一
  14. 1+3+5+....+99的和为
  15. 无线传感网络的自适应协作数据传输方法
  16. python引流_Python初学者也可以秒懂的Python For循环思维
  17. Studing Day2 - python基础2
  18. 第六章 Cesium学习入门之添加Geojson数据(dataSource)
  19. 关于电脑硬盘的二三事(SATA接口)
  20. 45个有用的JavaScript技巧,窍门和最佳实践

热门文章

  1. 一根网线两台电脑传输文件
  2. 2018北京网络赛B题 Tomb Raider
  3. ACM-ICPC2018北京网络赛 Tomb Raider(暴力)
  4. 【服务器托管单线、双线以及多线如何区别】
  5. 准确率(accuracy)、精确率(Precision)、召回率(Recall)
  6. 洛谷P1894 [USACO4.2]完美的牛栏The Perfect Stall
  7. open-flash-chart 与 FusionCharts 开发中使用(转)
  8. jQuery(一个JavaScript库)
  9. 库存管理系统的设计与实现(代码)
  10. qq输入法自定义短语并在手机qq输入法使用