实验一:假设病毒平均每5天1个人传染给2个人,如果不加人为控制,预测在第31天、61天的感染人数。
这题比较简单,只要找出每次传播中各数据变化的规律,一层一层地算即可:
get到重点
- 每5天传播一次
- 人数增长规律为: num = num * 2
- 当天数不为5的倍数时,感染人数向下取。如:天数为6,感染人数仍按第五天算,2+1=3
代码实现:
def virus(set_day):
row = 0 # 传播次数
day = 0 # 天数
num = 1 # 感染人数
while(day <= set_day):
row += 1
day = row * 5 # 5天传播一次
num *= 2
if(day > set_day): # 循环后天数可能大于设定值
return num / 2 # 人数往后退一位
else:
return num
二、现准备模拟医院打响疫情阻击战的过程。随着疫情发生,病毒专家发现人被病毒感染后,有约14天的潜伏期,也就是这期间感染者没有任何异样,第14天感染征兆发生,患者开始送去医院救治。医院对入院病人的平均救治时间为10天,也就是10天后治愈可以出院。这里设定医院累计出院超过1000人时(可以假设医院病人人数饱和),日均出院人数为1000人,求第31天,61天的出院人数
重点:
- 第14天,第一位患者被送去救治
- 第24天,第一位患者出院
- 第24天后,每隔5天就有一批患者出院
- 累计出院人数超过1000人后,每天出院1000人
代码实现:
def cure_num(set_day):
day = set_day - 14 # 坐标轴从0开始算
if day < 10: # 前10天无患者出院
return 0
num = 1 # 每批患者出院的数量
res = 1 # 总和
while(day >= 15):
num *= 2
if res > 1000: # 据题意,当总和达到1000,每天加1000
res += 1000
day -= 1
else:
res += num
if res > 1000:
day -= 1
else:
day -= 5
return res
本题出自《算法之美—python语言实现》1.6实验题,解答均为个人看法,非官方答案,如有错漏,请多多指教