python算法:病毒传播模型

实验一:假设病毒平均每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实验题,解答均为个人看法,非官方答案,如有错漏,请多多指教

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值