全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计与信息素养大赛”赛事之一,由中国电子学会主办,包含很多赛项,大赛自2013年举办,已连续成功举办八届,已正式入围“2022-2025学年面向中小学生的全国性竞赛活动名单”。
大赛旨在激发广大青少年的科学兴趣和想象力,培养钻研探究、创新创造的科学精神和实践能力,促进青少年科技创新活动的广泛开展,发现和培养一批具有科研潜质和创新精神的青少年科技创新后备人才。
大赛主要竞赛类别包括电子科技、智能机器人、软件编程三类,全国青少年Python编程挑战赛就属于其中的软件编程类。
一.赛事说明
2021-2022年(第8届)Python挑战赛赛程分为初赛、复赛和总决赛三个阶段。初赛是资格赛,复赛是地方选拔赛,总决赛是全国各地选拔的精英汇聚在一起进行PK。2021-2022年全国青少年Python编程挑战全国总决赛于2022年8月27日正式举行。一共是10道编程题,每道题100分,满分1000分,考试时间是120分钟。
10道编程题分别如下:
- 分苹果
- 韩信点兵
- 借书问题
- 四位数密码
- 邮票面值
- 取球
- 统计连续字符
- n的n次方
- 海盗搜身
- 父与子
超平老师将分10讲对每道题进行详细的解读和剖析,今天要解读的是第5题,邮票面值。
二.题目描述
题目背景:
我们在寄信的时候都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或者几张的组合,可以满足不同邮件的不同邮资。
已知每个信封上最多能贴5张邮票,邮票的种类至少需要3种,任意输入一个数字n代表邮票的种类,然后依次输入n个数字代表不同种类的邮票面值,计算并输出每个信封上可以构成的邮资的最大值。
输入描述:
第一行输入一个数字n代表邮票的种类;
然后依次输入n行数字代表n个不同种类的邮票面值;
输出描述:
输出每个信封上可以构成的邮资的最大值。
样例输入:
4
1
2
3
4
样例输出:
17
注意:
input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改
三.思路分析
邮票是邮政机关发行,作为寄送邮件的邮资凭证,通常有各种不同的面值,从而组合得到不同的邮资。
根据题目描述,要找5张邮票组合得到的最大值,最理想的情况是直接选择5张面值最大的邮票。
但是题目要求至少有3种不同邮票,我们可以选3张面值最大的邮票,然后再选出面值第二大和第三大的两张邮票。
在编写程序时,要注意以下几点:
1). 要确保输入n个数字,需要使用循环来实现;
2). 由于输入的数字并不一定是有顺序的,所以需要使用sort函数对面值进行排序;
接下来,我们进入具体的编程实现环节。
四.编程实现
根据上面的思路分析,我们编写代码如下:
# 获取数字n
n = int(input())
# 定义列表stamps,用于保存不同的面值
stamps = []
# 依次输入不同邮票面值,并存入列表中
for i in range(n):
stamps.append(int(input()))
# 对列表进行排序
stamps.sort()
# 取最后三项,其中最后一项取3次
_max = sum(stamps[-3:]) + stamps[-1] * 2
print(_max)
简单说明3点:
1). append方法的作用是向列表中追加列表项;
2). sort方法用于列表排序,默认从小到大排序;
3). 在Python中,可以使用切片操作来获取列表的某几项,其中[-3:]省略了第二个参数,表示从倒数第3项开始取,直到最后1项,而[-1]则表示最后一项。
五.总结与思考
本题难度一般,考查的知识点主要包括:
- 输入输出函数,重点是多行数据的输入;
- 列表操作,包括插入元素、排序、获取元素和切片操作;
- 类型转换;
解决本题的关键点是列表的灵活运用,列表是Python编程中非常重要的数据结构,与之对应的操作和函数也比较多,是我们学习的重点,一定要多加练习,熟练掌握。
邮票是是邮政机关发行,作为寄送邮件的邮资凭证,通常有各种不同的面值,从而组合得到不同的邮资。