赞
踩
小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0,他就停止锻炼。请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。
答案中只填写数,不填写单位。
答案:3880
本题思想简单,数据也不大,可以手算:
总体力值N = 10000;
跑一分钟、休息一分钟,一个循环消耗300体力,累计两分钟,
则:300*32 = 9600,即32次循环后,会消耗9600体力,累计32*2 = 64 分钟;
还剩余10000 - 9600 = 400,跑步一分钟消耗600体力,所以每秒消耗10体力;
64分钟后还剩400体力,所以还可以跑40秒;
小明停止时,累计64*60 + 40 = 3880
略
答案:52038720
日期类的问题可以用Excel表格做
新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准备给大量民众进病毒核酸检测。然而,用于检测的试剂盒紧缺。为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,如果检测前 k - 1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用了 k + 1 个试剂盒完成了 k 个人的检测。
A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能最节省试剂盒?
答案:10
假设A国有n个人,感染者有n/100
每k个人一组,共n/k组,共用n/k瓶试剂 按照最坏的情况,每多出一个感染者就多用k瓶试剂, 因此共用n/k+(n/100)*k瓶试剂
n是定值,所以求(1/k+k/100)最小
由于a+b>=2√ab 当且仅当a = b时,取等号 即1/k=k/100时,取得最小值
解得k = 10
附件 prog.txt 中是一个用某种语言写的程序。其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。
例如如下片段:
REPEAT 2:
A = A + 4
REPEAT 5:
REPEAT 6:
A = A + 5
A = A + 7
A = A + 8
A = A + 9
该片段中从 A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的循环两次中。
REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。
A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。
请问该程序执行完毕之后,A 的值是多少?
答案: 241830
思路: 可以建立一个栈来存放循环的信息,一个变量times存放当前行数被执行的次数。通过对文本的观察我们发现,可以通过每一行前面的空格数量来判断当前行数的“等级”,4个空格代表一个等级。如果当前行等级比上一层循环的等级低则说明退出了上一层循环,对栈和times进行改变即可。随后我们发现整个文本里面,所有数字都为单位数,所以我们直接用循环找到一个数字即可提取出该行的有效数字。
#include<bits/stdc++.h> using namespace std; int main() { string string_; stack<long long> stack_; freopen("prog.txt", "rb", stdin); getline(cin, string_);//读第一行 A=0 long long A=0,times=1,old_counts=0;//A=0,当前倍数,老的层数 while(getline(cin, string_)) { long long counts=0;//当前的层数, for(counts=0; counts < string_.size(); counts++) { //记录空格数 4个空格是一层 if(string_[counts] != ' ') break; } counts /= 4;//这句话的层数 while(counts < old_counts)//新层数低 则退出一层循环 pop { times /= stack_.top(); stack_.pop(); old_counts--; } if(string_[counts*4] == 'R')//R开头就是新增循环 { for(long long now=counts*4; now < string_.size(); now++)//找到数字 { if(string_[now]>='0' && string_[now]<='9')//如果是数字 { stack_.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。