2020第十一届蓝桥杯第一场 B组 C/C++
A、跑步训练
题面:
小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000 。如果小明跑步,每分钟损耗 600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0 ,他就停止锻炼。问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。
注意:
-
给的单位是分钟,要求我们以秒的形式输出。
-
不能直接根据题面意思暴力,这样子出来的结果是3840,但本题正确答案是3880。
- 为什么?因为通过以下这个代码,可以很容易发现,x的最后输出数据是400,所以说明最后一个数据并没有被算进去,而是直接被直接暴力直接break了。不要题目给你分钟就直接用分钟去解决问题了,我们应该把分钟首先都化成秒;而且并不是每次一定要跑完或休息完一分钟的,是可以直接20s、30s这样子的。
- 所以我们这题我们其实用笔算更不容易错,最后的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、整除序列
思路:简单暴力程序题。