image

编辑人: 长安花落尽

calendar2025-06-07

message4

visits375

第12届蓝桥杯C++青少组中/高级组选拔赛(STEMA)2021年1月24日真题答案及解析

一、实操题

1、排序

题目描述:

输入三个正整数,将三个正整数按从小到大排序输出。

输入描述:

输入三个正整数(0<正整数<1000),且正整数之间以一个空格分隔。

输出描述:

将三个正整数按照从小到大排序输出,且正整数之间以一个空格分隔。


样例输入:

15 8 10

样例输出:

8 10 15

参考答案:br />输入三个正整数,将三个正整数按从小到大排序输出。

解析:【喵呜刷题小喵解析】
本题要求将输入的三个正整数按从小到大的顺序排序并输出。由于题目中限制了正整数的范围在0到1000之间,因此我们可以直接比较这三个数的大小,然后按照从小到大的顺序输出。

具体实现步骤如下:

1. 读取输入的三个正整数,分别记为a、b、c。
2. 比较a、b、c的大小,将最小的数记为min,第二小的数记为second_min,最大的数记为max。
3. 输出min、second_min、max,即按从小到大的顺序输出这三个数。

由于题目中没有限制输入的顺序,因此我们需要考虑所有可能的输入顺序。例如,如果输入的三个数为a、b、c,则可能存在以下情况:

* a < b < c
* a < c < b
* b < a < c
* b < c < a
* c < a < b
* c < b < a

无论输入的顺序如何,我们都可以通过比较这三个数的大小,找到最小的数、第二小的数和最大的数,并按照从小到大的顺序输出。

2、平均值

提示信息:

歌唱比赛中有10名评委。评分规则是:每名评委给出一个0~100之间的分数,然后从10名评委所评分数中,去掉一个最高分,再去掉一个最低分,对剩余分数取平均值作为选手的最终得分。

题目描述:

给定10个评委的评分,然后去掉一个最高分,再去掉一个最低分后,求出剩余分数的平均值,作为选手最终得分。

输入描述:

输入10个正整数(O≤正整数≤100)表示10位评委评分,正整数之间以一个空格分隔。

输出描述:

去掉一个最高分和一个最低分后,求出剩余分数的平均值,作为选手最终得分,并将其输出。  (计算结果保留全部小数位数)


样例输入:

80 85 83 89 98 75 80 90 78 65

样例输出:

82.5

参考答案:```pythonscores = list(map(int, input().split()))max_score = max(scores)min_score = min(scores)valid_scores = [score for score in scores if score != max_score and score != min_score]average_score = sum(valid_scores) / len(valid_scores)print(f"average_score:.2f")```

解析:【喵呜刷题小喵解析】:
首先,我们从输入中读取10个评委的评分,并将其存储在一个列表中。然后,我们找出列表中的最大值和最小值,即最高分和最低分。

接着,我们创建一个新的列表,只包含有效评分,即去掉最高分和最低分的评分。

最后,我们计算有效评分的平均值,并将其输出。注意,在计算平均值时,我们使用`len(valid_scores)`来计算剩余评分的数量,并使用`{average_score:.2f}`来确保输出结果保留两位小数。

3、换算

提示信息:

一分钟有60秒,一小时有60分钟。

题目描述:

将秒数转换为与其等价的小时数、分钟数、秒数的表现形式。

小时数、分钟数、秒数的数字之间以英文冒号(:)分隔,且数字小于10的,需要在数字前补0。

例如:500秒等同于8分钟20秒,表现形式为:00:08:20;7259秒等同于2小时0分钟59秒,表现形式为:02:00:59。

输入描述:

输入一个正整数N(N<86400)作为秒数。

输出描述:

输出与其对应的小时数、分钟数、秒数,数字之间以英文冒号分隔。(数字小于10的,需要在数字前补0)


样例输入:

7259

样例输出:

02:00:59

参考答案:将秒数转换为与其等价的小时数、分钟数、秒数的表现形式,输入一个正整数N,输出与其对应的小时数、分钟数、秒数,数字之间以英文冒号分隔,数字小于10的,需要在数字前补0。

解析:【喵呜刷题小喵解析】:
对于这个问题,我们需要将输入的秒数N转换为小时、分钟和秒的形式,并且以英文冒号分隔。

首先,我们可以计算小时数,使用公式:小时数 = N // 3600。

然后,我们可以计算剩余的秒数,使用公式:剩余的秒数 = N % 3600。

接着,我们可以将剩余的秒数转换为分钟和秒的形式,使用公式:分钟数 = 剩余的秒数 // 60,剩余的秒数 = 剩余的秒数 % 60。

最后,我们按照题目要求,将小时数、分钟数和剩余的秒数以英文冒号分隔,并且数字小于10的,需要在数字前补0。

例如,如果N=7259,那么小时数 = 7259 // 3600 = 2,剩余的秒数 = 7259 % 3600 = 59,分钟数 = 59 // 60 = 0,剩余的秒数 = 59 % 60 = 59。因此,输出为02:00:59。

4、病毒繁殖

提示信息:

某种病毒具有很强的繁殖能力,从病毒粒子出生后的第5分钟开始,每分钟可以复制出一个新的病毒粒子。新出生的病毒粒子从第5分钟开始,也可以每分钟复制一个新的病毒粒子。

举例来说,第1分钟时有一个病毒粒子,此病毒粒子从第5分钟开始复制新的病毒粒子,因此第5分钟时的病毒数量为2个;第6分钟时又复制出新的病毒粒子,因此第6分钟的病毒数量为3个;以此类推,第7分钟时病毒粒子数为4;第8分钟时病毒粒子数为5;第9分钟时,第5分钟复制出的病毒粒子开始复制新的病毒粒子,因此第9分钟时的病毒总数为7;第10分钟时,第6分钟复制出的病毒粒子开始复制新的病毒粒子,因此第10分钟时的病毒粒子总数为10。

题目描述:

计算病毒粒子总数,已知第一分钟时出生了一个病毒粒子,假设所有病毒粒子不会自动死亡,请计算第N分钟时的病毒粒子总数。

例如:前10分钟病毒粒子的总数分别为1,1,1,1,2,3,4,5,7,10。

输入描述:

输入一个正整数N(O<N≤60),表示时间。

输出描述:

输出第N分钟时,病毒粒子的总数。


样例输入:

10

样例输出

10

参考答案:对于第N分钟时的病毒粒子总数,可以使用等比数列的求和公式来计算。病毒粒子的繁殖从第5分钟开始,所以第N分钟时的病毒粒子总数为等比数列的前(N-4)项和。等比数列的首项为2,公比为2,项数为(N-4),因此可以使用等比数列求和公式:S = a1 * (1 - r^n) / (1 - r),其中a1为首项,r为公比,n为项数。将a1=2,r=2,n=N-4代入公式,即可得到第N分钟时的病毒粒子总数。

解析:【喵呜刷题小喵解析】:
病毒粒子的繁殖从第5分钟开始,每分钟复制出一个新的病毒粒子,因此病毒粒子的数量形成了一个等比数列。等比数列的前n项和公式为:S = a1 * (1 - r^n) / (1 - r),其中a1为首项,r为公比,n为项数。在这个问题中,首项a1=2,公比r=2,项数n=N-4。因为病毒粒子从第5分钟开始繁殖,所以前N分钟中的前4分钟病毒粒子数量保持不变,为1。从第5分钟开始,病毒粒子数量开始按照等比数列增长,因此第N分钟时的病毒粒子总数为等比数列的前(N-4)项和。使用等比数列求和公式进行计算,即可得到第N分钟时的病毒粒子总数。

5、最佳策略

题目描述:

有一辆最大载重为15吨的货车。现一共有五件货品,重量分别是W1,W2,W3,W4,W5,价值分别是V1,V2,V3,V4,V5。现希望货车中装入的货物总价值越大越好。请你编写程序,帮助计算,在不超载的情况下,货车能够运输的货品最大总价值是多少?

例如,5件货品的重量和价值如下表所示:

输入描述:

第一行输入5个正整数,数字之间以一个空格分隔,表示货品的重量。

第二行输入5个正整数,数字之间以一个空格分隔,表示货品的价值。

输出描述:

计算能够运输的货品最大总价值,并输出。


样例输入:

3 4 6 6 5
1000 500 400 1200 300

样例输出:

2700

参考答案:```pythonweights = list(map(int, input().split()))values = list(map(int, input().split()))max_weight = 15total_weight = 0max_value = 0for i in range(5):if total_weight + weights[i] <= max_weight:total_weight += weights[i]max_value += values[i]else:breakprint(max_value)```

解析:【喵呜刷题小喵解析】:
这是一个01背包问题,目标是在不超过货车最大载重的情况下,使货车运输的货品总价值最大化。

首先,我们定义两个列表weights和values,分别存储货品的重量和价值。

然后,我们定义最大载重max_weight为15吨。

接下来,我们遍历所有的货品,如果当前货品的重量加上已经装载的货品重量不超过最大载重,就将其加入货车,并更新最大价值。否则,停止装载。

最后,输出最大价值。

在Python中,我们可以使用input函数从标准输入中读取一行数据,然后使用split函数将其分割成一个列表。使用map函数可以将字符串列表转换为整数列表。

在这个问题中,我们只需要遍历一次货品列表,因此时间复杂度为O(n),其中n为货品的数量。空间复杂度也为O(n),需要存储货品的重量和价值。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:第12届蓝桥杯C++青少组中/高级组选拔赛(STEMA)2021年1月24日真题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share