传染(infect)某种传染病第一天只有一个患者,前五天为潜伏期,不发作也不会传染人第6天开始发作,从发作到治愈需要5天时间,期间每天传3个人 求第N天共有多少患者
思路:
开始时认为可以进行判断五天或者五天十天后进行计算,但是进行试验后发现这样没有办法判断减少的人,如果强行这样的话会很复杂,得不偿失;
但是经过搜索后发现可以通过遍历每天的人数,一天天判断让数据进行相互运算
python
def infect(N):
lurk_day = 5 # 潜伏期天数
disease_day = 5 # 发作期天数
people_inface = 3 # 每天每个发作期患者传染的人数
begin = 1 # 患者数
now_people = 0 # 当前处于发作期的患者数
# 遍历每一天
for day in range(1, N + 1):
# 如果今天有患者开始发作(即潜伏期结束)
if day - lurk_day > 0:
# 将昨天处于潜伏期的患者加入到发作期患者列表中
now_people += 1
# 如果今天有发作期患者结束发作(即治愈)
if day - lurk_day - disease_day >= 0:
# 将最早开始发作的患者从发作期列表中移除
now_people -= 1
# 如果今天有发作期患者
if now_people > 0:
# 计算今天新增的患者数量(由发作期患者传染)
new_patients = people_inface * now_people
# 将新增患者数量加到总患者数量中
begin += new_patients
# 返回第N天的患者总数
return begin
# 示例:计算第10天的患者总数
print(infect(5))