经典算法——传染病问题(Java版)

某种传染病第一天只有一个患者,前5天为潜伏期,不发作也不会传染人,第6天开始发作,从发作到治愈需要5天时间,期间每天传染3个人,求第N天共有多少患者。
详细数据分析如下表:(前20天状况)

④潜伏期人数=前一天潜伏期人数-潜伏期转发作期人数+当天新传染人数
①潜伏期转发作期人数=5天前新感染人数
②发作期人数=前一天发作期人数-当天康复人数+5天前新感染人数(或当天潜伏转发作期人数[5~10天计算时只能使用这个量])
③当天新感染人数=3*当天发作期人数
②当天康复人数=5天前潜伏期转发作期人数(或10天前新感染人数)
⑤患者=潜伏期人数+发作期人数
根据上面的关系式可以简单分析出来,如果要求未知的某天的信息,就必须知道前一天的信息和前五天的信息
假设输入11天,则需要知道第10天和第6天的相关内容;假设输入13天则需要第12天和第8天内容,而第12天又需要知道第11天和第7天的数据信息
所以因为需要知道的距离输入时间最远的时间是5天,而未经过计算已知数据的最晚天数是第10天,则第11天到第15天是个转换阶段
下面是算法核心函数:
AC1(int days)用来计算对应天数的所有数据
AC2(int days)AC2用来反复调用AC1来实现对输入第N天得前面所有天数的数据求值的方式来求得第N天数据
ACattack(int days)计算当天发作人数
ACperpatent(int days)计算当天潜伏期人数
ACrecovery(int days)计算康复人数
ACQZF(int days)计算潜伏期转发作期的人数
ACinfection(int days)计算当天感染的人数
下面是算法的Java代码实现:

package com.cn;
import java.util.Scanner;

public class Patient2 {
    //下面数组用于寄存前99天的相关数据,[0]暂且不用,但是实际计算量太大这些天完全用不完就出现了溢出
	static int[] perpatent=new int[100]; //潜伏期人数
	static int[] QZF=new int
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值