一.题目描述
如果结果为阴性,则说明这 k个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测。
加上最开始的合并检测,一共使用了 k + 1 个试剂盒完成了 k 个人的检测。A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能最节省试剂盒?
二.思路分析
(1)感染率为1%,假设有100个人,阳性为1人,阴性为99人,因为假设100人有1人感染,所以所分的试剂盒中一定有一个是需要将里面所分到的所有人再测一次
(2)k为每个试剂盒所分配的人数
(3)所需的试剂盒有两种情况:第一种,人数可以整除k,所需试剂盒为100/k+k;
第二种,人数不能整除k,向上取整(即加上1),所需的试剂盒 为:100/k+1+k
三.知识点
Integer.MAX_VALUE表示int数据类型的最大取值数:2 147 483 647(min定义初始化最大值)
Integer.MIN_VALUE表示int数据类型的最小取值数:-2 147 483 648(max定义初始化最小值)
四.代码
public class test1{
public static void main(String[] args){
int min = Integer.MAX_VALUE;//min初始化为最大数
int n = 100;//假设100人,因为感染率1%,所以有1个人为阳性,99个人为阴性
int a=0;
int t=0;
for(int k=1;k<=100;k++){
if(n%k==0){//如果可以整除
a=n/k+k;//试剂盒共需要的数目(因为假设100人有1人感染,所以所分的试剂盒中一定有一个是需要将里面所分到的人再测一次)
if(a<min){
min=a;//比较得出最小值
t=k;//最小值得到的k用t存起来
}
}
if(n%k!=0){//如果不能整除
a=n/k+1+k;//所需试剂盒需向上取整(即加上1)
if(a<min){
min=a;//比较得出最小值
t=k;//最小值得到的k用t存起来
}
}
}
System.out.println(t);
}
}