Python习题《古典—兔子生兔子问题》

今天有点肉多啊,还是习题!不过有点绕。


兔子生兔子(斐波那契数列)

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

分析一下,前两个月都是一对兔子(父),第三个月开始就生下一对兔子(子),以后每一个月生一对兔子。到这对子兔子可以繁衍的时候是第五个月,如下图(每一列标有颜色的都是可以繁衍的):

Python习题《古典—兔子生兔子问题》

例如第六个月的时候,父兔子已经生下了四对子兔子,子兔子从第五个月开始生下第一对孙兔子,第六个月生下3对孙兔子(父兔子3,4月份一共生下2对子兔子,第一代3月生的子兔子(1对)在第五月生下第一代孙兔子(1对),第二代4月生的子兔子(2对)在第六月生下第二代孙兔子(2对)),后面的均是以此类推,然后得知每个月的兔子总数是1,1,2,3,5,8,13,21,34,55,89,144.....

这个序列很明显是从第二个数字开始规律就是第三个数字等于前两个数字之和,这样规律找到了就好编写程序了。

#生兔子问题
q1,sum = 1,1
q2 = 1
for i in range(1,24,1):
   if  i == 1 or i == 2:
       print("第{}个月,兔子总数为{}对.".format(i, sum))
   else:
       q1 = sum
       sum = q1 + q2
       q2 = q1
       print("第{}个月,兔子总数为{}对.".format(i,sum))

上叙q1,q2就是用来将每一次相加完过后的第一个数字,和第二个数字存储起来以便下一次相加的时候使用。

初学者,若有不足之处还望各位看官,大佬海涵,并给予批评指正!谢谢

上一篇:数据结构Python版练习题(一)


下一篇:python 数据分析