第9届Python编程挑战赛北京赛区复赛真题剖析-2023年全国青少年信息素养大赛

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛系列的第16讲。

全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计与信息素养大赛”赛事之一,由中国电子学会主办,包含很多赛项,大赛自2013年举办,已连续成功举办八届,已正式入围“2022-2025学年面向中小学生的全国性竞赛活动名单”。

大赛旨在激发广大青少年的科学兴趣和想象力,培养钻研探究、创新创造的科学精神和实践能力,促进青少年科技创新活动的广泛开展,发现和培养一批具有科研潜质和创新精神的青少年科技创新后备人才。

大赛主要竞赛类别包括电子科技、智能机器人、软件编程三类,全国青少年Python编程挑战赛就属于其中的软件编程类。

一.赛事说明

2023年(第9届)Python挑战赛赛程分为初赛、复赛和总决赛三个阶段。初赛是资格赛,复赛是地方选拔赛,总决赛是全国各地选拔的精英汇聚在一起进行PK。

本届Python挑战赛是在线上举行,参赛选手登录大赛官网在指定页面完成答题并提交答案。评定成绩的依据是同时考虑得分和用时两个方面,首先是得分高者名次靠前,如果得分一样,则用时少者名次靠前。

2023年全国青少年Python编程挑战赛华北赛区(北京)初中组复赛于2023年7月15日正式举行。一共有6道题,全是编程题,考试时间是90分钟。6道题目执行时间均限时1000毫秒,内存256M。

题目分别是求余数、最大身高差、重复字符、出租车费用、分钱方案和错排问题,接下来超平老师为大家一一解析。

二.真题解析

第1题,求余数

题目描述:

输入一个正整数,输出这个整数除以5的余数。

输入描述:

输入一行一个正整数

输出描述:

输出这个整数除以5的余数

样例1:

输入:

12

输出:

2

[超平老师解读]:

本题考查的知识点是取模运算符,在Python编程中,取模运算符使用%,代码比较简单。

[参考代码]:

第2题,最大身高差题目描述:

上了初中之后,很多同学身高都开始迅速增长,不过有的同学生长发育的早一些,有的同学会晚一些。

现在学校的生理健康老师想统计一下班级里面学生身高的最大跨度值(最大跨度值=身高最大值-身高最小值)。

任意输入一行整数,中间用空格间隔,输出身高最大跨度值。

输入描述:

输入一行整数,中间用空格间隔。

输出描述:

输出身高最大跨度值。

样例1:

输入:

168 152 140 179 155 162 172

输出:

39

[超平老师解读]:

本题考查的知识点包括输入处理和列表的操作。

输入一行整数,中间使用空格间隔,我们要将每个数字提取出来,需要使用split方法,然后再转换成整数即可。

身高最大跨度,就是最大身高减去最小身高,所以只需要找到这两个列表项即可,可以使用两种方法来实现:

1). 直接使用max和min函数;

2). 对列表按照从小到大的顺序排序;

[参考代码]:

方法1,使用max和min函数,代码如下:

方法2,使用列表排序方法,代码如下:

第3题,重复字符

题目描述:

输入一个字符串s,将s中的每个字符都重复一次,然后输出这个新的字符串,例如,当s="abc"时,输出"aabbcc"。

输入描述:

输入一个字符串s。

输出描述:

输出一个新的字符串。

样例1:

输入:

abcd

输出:

aabbccdd

[超平老师解读]:

本题考查的知识点是字符串处理及运算,首先需要对字符串进行遍历操作,分别获取每一个字符,然后将该字符重复一遍,再进行连接。

对应的可以采取两种方法来编写代码,一是使用字符串拼接,二是直接利用列表推导式和解包操作。

[参考代码]:

方法1,使用字符串拼接,代码如下:

方法2,使用列表推导式结合解包操作,代码如下:

第4题,出租车费用

题目描述:

某市出租车的计费标准是:

起步价 (3千米以内,包括3千米) 14元,以后每超过1千米(不足1千米的按1千米计算)另加价3元。

小可家到学校距离n千米,他打车需要多少钱?

输入描述:

输入一个数n表示小可家到学校距离。

输出描述:

输出打车的费用。

样例1:

输入:

8.8

输出:

32

[超平老师解读]:

本题考查的知识点包括if语句和算术运算,重点是向上取整。在Python编程中,可以使用数学库math中的ceil方法来实现向上取整。

[参考代码]:完整的代码如下:

第5题,分钱方案

题目描述:

有n个人,他们需要分配m元钱 (m >= n),每个人至少分到1元钱,且每个人分到的钱数必须是整数。请问有多少种分配方案?

输入描述:

输入一行两个正熬数n, m,用空格间隔。

输出描述:

输出分配方案数。

样例1:

输入:

5 10

输出:

126

[超平老师解读]:

本题考查的知识点是动态规划算法和二维列表的使用,当然也可以使用递归算法来实现,重点是动态规划算法的实现步骤。

具体的分析及实现请参考《使用动态规划解决分钱方案-2023年全国青少年信息素养大赛Python复赛真题精选》这篇文章。

第6题,错排问题

题目描述:

圣诞节快到了,公司为每个员工都准备了礼物,每个礼物都有一个精美的盒子。如果所有的礼物都不小心装错了盒子,求所有礼物都装错盒子共有多少种不同情况。

输入描述:

输入一个正整数n表示公司人数,保证n ≤ 20。

输出描述:

输出一个整数,代表有多少种情况。

样例1:

输入:

2

输出:

1

[超平老师解读]:

本题考查的是经典的错排问题,涉及到的知识点包括函数、递归算法、列表和动态规划算法,重点是动态规划算法。

具体的分析及实现请参考《使用动态规划实现错排问题-2023年全国青少年信息素养大赛Python复赛真题精选》这篇文章。

三.总结与思考

本次复赛一共6道编程题,题目由易到难,考查的知识点主要包括如下几个方面:

  • 输入和输出,重点是一行多个数字的输入;
  • 运算符,重点是取模和取整运算;
  • 字符串处理及操作;
  • 列表的操作及运用,包括一维列表和二维列表;
  • 递归算法;
  • 动态规划算法;

这是初中组的复赛真题,总体来说,题目难度不小,尤其是最后两题,都需要使用动态规划算法。这就要求我们在平常的学习过程中,要把重点放在算法上,算法是编程的核心,也是解决问题的关键。

当然,每一道题都有多种解法,也请你多思考一下,有没有更好的思路和方法,欢迎和超平老师进行交流。