基础------13.合并检测

题目:

新冠疫情由新冠病毒引起,最近在 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+"人使用最节省");
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_64428129/article/details/126173345