技能树基础——13合并检测(总结规律,for)

题目:

新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准 备给大量民众进病毒核酸检测。

然而,用于检测的试剂盒紧缺。为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k 个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k 个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明 至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看, 如果检测前 k−1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中 不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用 了 k + 1 个试剂盒完成了 k 个人的检测。

A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能最节省试剂盒?

设检测人数为100人,根据概率为1%,则只有1个为阳性。k个人一组,则需要的试剂数量为:对所有分组进行合并检测所需要的试剂数100/k+其中1个分组阳性所需要的试剂数k+未分组人数所需的试剂数量。

分析:

检测人数是100

分两种情况

第一种:试剂盒数量能被100整除,那么就一共需要100/k+k个盒子。如k=20.则有五组,

因为是均匀分布所以这五组里面有一组是阳性,则那一组需要所有人全再测一遍,也就是100/k+k

第二种:试剂盒数量不能被100整除,那么就一共需要100/k+k+1个盒子。如k=40.

则有三组,40,40,20,考虑到最坏情况,需要加上40也就是100/k+k+1

Integer.MAX_VALUE指的是int类型的最大值,也就是2 147 483 647

大概步骤

1。遍历可能出现的每个组的容纳人数数量。

2。两种情况。能被整除,和不能被整除

3。从1开始到100,这是所有可能出现的每个组数量,把这100个数值,一直按照上面100/k+k,100/k+k+1这两个找盒子数量,只要下一个小,那么就把相对应的k值更新到hezi中。

步骤:

package a28;

public class 合并检测28 {

    public static void main(String[] args) {
        int min = Integer.MAX_VALUE;// 取最大值
        int hezi = 0;// 用于记录需要最小的检测盒
        for (int i = 1; i < 100; i++) {
            if (100 % i == 0) { // 100人能被整除
                if (100 / i + i < min) {
                    min = 100 / i + i;// 这一次需要的盒子
                    hezi = i;// 把组给hezi
                }
            } else if (100 % i != 0) { // 100人不能被整除
                if (100 / i + 1 + i < min) {
                    min = 100 / i + 1 + i;// 这一次需要的盒子
                    hezi = i;// 把组给hezi
                }
            }

        }
        System.out.println(hezi);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W少年没有乌托邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值