兔子产子

1.问题描述

有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少?

2.问题分析

兔子产子问题是一个有趣的古典数学问题,我们画一张表来找下兔子数的规律,如下表所示

月数 小兔子对数 中兔子对数 老兔子对数 兔子总对数
1 1 0 0 1
2 0 1 0 1
3 1 0 1 2
4 1 1 1 3
5 2 1 2 5
6 3 2 3 8
7 5 3 5 13

说明:不满1个月的兔子为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。

可以看出,每个月的兔子总数依次为1,1,2,3,5,8,13...这就是Fibonacci数列。总结数列规律即为从前两个月的兔子对数可以推出第3个月的兔子对数

3.算法设计

本题目是典型的迭代循环,即是个不断用新值取代变量的旧值,然后由变量旧值递推出变量新值的过程。这种选代与这些因素有关:初值迭代公式选代次数。经过问题分析,算法可以描述为

fibn-1 = fiibn-1 = 1(n<3) 初值

fibn = fibn-1 + fibn-2(n≥3) 迭代公式

 

Python 语言來描述迭代公式即为fib=fibl+fib2,其中fib为当前新求出的免子对数,fibl 为前一个月的兔子对数,fib2为前两个月的免子对数,然后为下一次选代做准备,fib②给fib1①给fib2,进行如下的赋值 fib2=fib1, fibl=fib,要注意赋值的次序;选代次数由循环变量控制,为所求的月数。

4.完整程序

if __name__=="__main__":
fib1 = 1
fib2 = 1
i = 1
while i <= 15: #每次求两个,因此循环变量循环到15
print("%8d %8d" %(fib1, fib2), end=" ")
if i % 2 == 0:
print()
fib1 = fib1 + fib2 # 最新一个月的兔子数
fib2 = fib1 + fib2 # 第4个月的兔子数
i += 1

最新文章

  1. CSS中的绝对定位与相对定位
  2. myeclipse如何修改Web项目名称,eclipse如何修改项目名字
  3. eclipse报错 :java was started but returned exit code=13
  4. acm算法模板(2)
  5. 表单校验组件ValidForm
  6. How to Be Good at Mathematics
  7. 你好,C++(9)坐216路公交车去买3.5元一斤的西红柿——C++中如何表达各种数值数据 3.3 数值数据类型
  8. Linux环境下常用的SSH命令
  9. ELK学习总结(4-1)elasticsearch更改mapping(不停服务重建索引)
  10. CRT破解版
  11. Java的类加载器种类(双亲委派)
  12. Linux之LVS 20180708
  13. Angular 学习笔记 (Material Select and AutoComplete)
  14. LSTM学习—Long Short Term Memory networks
  15. Hibernate 查询技术
  16. linux 下的emoji在MariaDB中的字符集修改
  17. SecureCRT方向键不可用
  18. DC-DC Controllers Use Average-Current-Mode Control for Infotainment Applications-3939
  19. div始终在底部
  20. 技术揭秘“QQ空间”自动转发不良信息

热门文章

  1. system表空间
  2. 如何设置Python环境变量
  3. CentOS7日志管理工具 journalctl
  4. 17 DOS攻击防范
  5. ps2020 将图片中的字清除 并且不损坏背景图
  6. SpringBoot 优雅整合Swagger Api 自动生成文档
  7. kmp算法 汇总
  8. 万字长文肝Git--全流程知识点包您满意【建议收藏】
  9. springcloud gateway(hystrix filter)
  10. MySQL索引类型总结和使用技巧以及注意事项 (转)