题目:
新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准备给大量民众进病毒核酸检测。
然而,用于检测的试剂盒紧缺。为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k 个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k 个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明 至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看, 如果检测前 k−1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中 不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用 了 k + 1 个试剂盒完成了 k 个人的检测。
A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能最节省试剂盒?
分析:
k个人 的采集标本放于一个试剂盒 被测的民众的感染率大概是 1% 100人中感染一人
1) 盒为阴 即k个人为阴
2) 盒为阳 即k人中最少有一人为阳 重新独立检测k人
假设
k为100人
1)检测人数刚好于试剂盒检测完:
if(k%i==0) k/i + 感染人*i
2)检测人数大于试剂盒
k/i + 1 + 感染人*i
import java.util.Scanner;
public class _1_13 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int k = s.nextInt(); //检测人数
int gan, people=0, usehe; //感染数 使用人数 使用盒子数
int maxhe = k; //使用最多盒为一人一检
if(k%100==0)
gan = (int)(0.01*k); //每100人中感染数
else
gan= (int)(0.01*k)+1; //检测人数不能被100整除
for(int i=2; i<100; i++){
if(k%i==0)
usehe = k/i + gan*i;
else
usehe = k/i + 1 + gan*i;
if(maxhe>usehe)
{
maxhe = usehe;
people= i;
}
}
System.out.println("每"+people+"人使用最节省");
}
}