python学习:关于生兔子问题
今天一个朋友问了一个很有意思的问题,是一个关于生兔子的。我用的python3.6写的python程序,可能和有的人用的编程环境不一样,但是语法是差不多的。
首先上问题:有个编程算法题–
有一对兔子,出生后三个月开始生一对兔子,生完后每个月生一对兔子,刚出生的兔子也满足上面的生育条件。如果兔子不死亡请求出时间月份与兔子之间数量的因果,如果四个月是兔子寿命,请问时间与兔子之间会发生怎么样的变化。
有学其他语言的朋友也可以试试,感觉满有意思的。
先上程序吧~
#有一对兔子,出生后三个月开始生兔子,生完后每个月生一对兔子,
#生完后每个月生一对兔子,刚出生的兔子也满足上面的生育条件。
#如果兔子不死亡请求出时间月份与兔子之间数量的因果,
#如果四个月是兔子寿命,请问时间与兔子之间会发生怎么样的变化。
#------------------全局变量------------------#
time_1=0#变化的时间,按月计算
tuzi_zhongqun=[]#用列表来写第几个月的兔子,主要是用来看兔子能不能生
tuzi_shuliang=[]#用来统计第几个月的时候新生的兔子数量
#------------------全局变量------------------#
#-----------------面向对象--------------------#
class tuzi():#兔子有两个能力,一个是年龄会增长,一个是生育
def __init__(self):
self.shengyunengli=0
self.age=0
def tuzizhuangtai(self):#兔子的年龄加一个月,同时随时间改有没有生育能力
self.age+=1
if(self.age>=3):
self.shengyunengli=1
#-----------------面向对象--------------------#
#-------------------函数-----------------------#
def panduan_nengbunengsheng():
global time_1
global tuzi_shuliang
xintuzi=0
for i in range(len(tuzi_zhongqun)):
if(tuzi_zhongqun[i].shengyunengli==1):
xintuzi=tuzi_shuliang[i]+xintuzi#如果有生育能力,就生这个种群兔子数目的新兔子,都给新兔子数目
tuzi_shuliang.append(xintuzi)
#-------------------函数-----------------------#
#----------------------初始化---------------------#
tuzi_shuliang.append(2)
time=int(input("请输入时间:"))#输入要统计多少月内的兔子数
#----------------------初始化---------------------#
#----------------------主程序---------------------#
while(1):
if(time_1==time):#如果时间到了预定的时间,就输出所有的兔子的数量,然后跳出循环
k=0#用来统计所有的兔子数量
for i in range(len(tuzi_shuliang)):#将所有的兔子数量都加到K里面
k+=tuzi_shuliang[i]
for i in range(len(tuzi_zhongqun)):
print(tuzi_zhongqun[i].shengyunengli)
print(tuzi_shuliang)
print(k)
break
elif(time_1<time):#如果时间在预定时间之内,循环判断所有兔子
tuzi_new=tuzi()#先创造新一个月的新出生的兔子种群
tuzi_zhongqun.append(tuzi_new)#把兔子种群加到用来统计的列表里
panduan_nengbunengsheng()#用函数判断所有的兔子有没有生育能力,同时把新生的兔子加到tuzi_shuliang这个列表的最后一行
for i in range(len(tuzi_zhongqun)):#让兔子年龄涨一岁,同时看看有没有得到生育能力
tuzi_zhongqun[i].tuzizhuangtai()
time_1+=1#时间多一年
#----------------------主程序---------------------#
最后输出的就是第几个月的兔子有没有生育能力和第几个月生的兔子和所有兔子的数量。
我只草草写了一下,这个程序还不够精炼,有兴趣的可以试试换种方式写,或者C++写或者是其他的语言写。