2020第十一届蓝桥杯第一场 B组 C/C++

A、跑步训练

题面:

小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000 。如果小明跑步,每分钟损耗 600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0 ,他就停止锻炼。问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。

注意:

  1. 给的单位是分钟,要求我们以秒的形式输出。

  2. 不能直接根据题面意思暴力,这样子出来的结果是3840,但本题正确答案是3880

  • 为什么?因为通过以下这个代码,可以很容易发现,x的最后输出数据是400,所以说明最后一个数据并没有被算进去,而是直接被直接暴力直接break了。不要题目给你分钟就直接用分钟去解决问题了,我们应该把分钟首先都化成秒;而且并不是每次一定要跑完或休息完一分钟的,是可以直接20s、30s这样子的。
  1. 所以我们这题我们其实用笔算更不容易错,最后的400应该这样处理:
  • (frac{400}{600}) = (frac{x}{60}) , 然后我们会发现 (x=40s),之前的3840+40就等于3880啦!

PS:真的好菜哦!

    int w=0,x=10000;
    while(x)
    {
        //if(x<=0) break;
        x-=600;
        w++;
        if(x<=0) break;
        x+=300;
        w++;
        cout<<x<<endl;
    }

B、纪念日

思路:windows下搜计算器 - > 找到日期计算 -> 拖拉以下就行 -> 单位转换。
答案:52038720

C、合并检测

题面:

新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情, A 国准备给大量民众进病毒核酸检测。然而,用于检测的试剂盒紧缺。为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人( k 个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k 个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,如果检测前 k−1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用了 k+1 个试剂盒完成了 k 个人的检测。
A 国估计被测的民众的感染率大概是 1,呈均匀分布。请问 k 取多少能最节省试剂盒?

思路:并没有看懂别人写的!?(我不会,这是别人的思路,没看懂)

设总人数为pop,感染率p,每次k人,总市级数sum
sum = ([pop/k]+1)*(1+k*p(k+1))
这里的[pop/k]+1)即pop/k向上取整
[pop/k]+1)这里由于pop数量较大,所以这里向上取整的1可以忽略,这里直接取了pop/k,即
sum = (pop/k)*(1+kp(k+1))
将p代入sum = (pop/k)*(1+k*0.01(k+1))
sum求导 = (pop/k)(0.01k-1/k)
可得当k = 10时,sum取最小值

D、REPEAT 程序

思路:我直接暴力写,算出次数是403,但是貌似不对,然后我看了题解,也没明白啥意思。

这个用python写的:https://blog.csdn.net/zranxi/article/details/107629155

这个是本题的数据:https://blog.csdn.net/zranxi/article/details/107630173

E、矩阵

F、整除序列

思路:简单暴力程序题。

G、解码

H、走方格

I、整数拼接

J、网络分析

原文地址:https://www.cnblogs.com/OFSHK/p/13782943.html