蓝桥杯JAVA B组 2020(2)第三题 合并检测

一.题目描述

如果结果为阴性,则说明这 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);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值