[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛系列的第19讲。
全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计与信息素养大赛”赛事之一,由中国电子学会主办,包含很多赛项,大赛自2013年举办,已连续成功举办八届,已正式入围“2022-2025学年面向中小学生的全国性竞赛活动名单”。
大赛旨在激发广大青少年的科学兴趣和想象力,培养钻研探究、创新创造的科学精神和实践能力,促进青少年科技创新活动的广泛开展,发现和培养一批具有科研潜质和创新精神的青少年科技创新后备人才。
大赛主要竞赛类别包括电子科技、智能机器人、软件编程三类,全国青少年Python编程挑战赛就属于其中的软件编程类。
2023年(第9届)Python挑战赛赛程分为初赛、复赛和总决赛三个阶段。初赛是资格赛,复赛是地方选拔赛,总决赛是全国各地选拔的精英汇聚在一起进行PK。
本届Python挑战赛是在线上举行,参赛选手登录大赛官网在指定页面完成答题并提交答案。评定成绩的依据是同时考虑得分和用时两个方面,首先是得分高者名次靠前,如果得分一样,则用时少者名次靠前。
2023年全国青少年Python编程挑战赛华南赛区(海南)复赛于2023年7月8日正式举行,这是小学高年级组的Python真题,采取的是在线考试,一共有6道题,全是编程题,考试时间是90分钟。
6道题目执行时间均限时1000毫秒,内存256M。题目分别是整数加8、哼哈二将、幸运数字8、摆放花盆、玩石头游戏和卡牌游戏,接下来超平老师为大家一一解析。
第1题,整数加8
题目描述:
输入一个整数,输出这个整数加 8 的结果。
输入描述:
输入一行一个正整数。
输出描述:
输出求和的结果。
样例1:
输入:
5
输出:
13
[超平老师解读]:
本题考查的知识点包括类型转换和加法运算,代码比较简单。
[参考代码]:
第2题,哼哈二将
题目描述:
哼哈二将,形象威武凶猛,一名能鼻哼白气制敌,一名能口哈黄气擒将。
这样一次"哼哈”就可以消灭一个敌人,现在来了n个敌人,请你输出一串"哼哈"来消灭全部敌人。
例如,当n = 3时,输出”哼哈哼哈哼哈”。
输入描述:
输入一行一个正整数。
输出描述:
输出一串字符。
样例1:
输入:
3
输出:
哼哈哼哈哼哈
[超平老师解读]:
本题考查的知识点是字符串的乘法运算。
对于本题,传统的方法是使用循环,然后进行字符串连接即可。实际上,还有更简单的方法,就是使用*运算符,对字符串进行乘法运算。
Python提供了一种简单而强大的方法来实现字符串乘法,即使用乘号(*)操作符。它的语法如下:
如此一来,代码就变得非常简单了,只需要将字符串“哼哈”乘以n就可以了。
[参考代码]:
第3题,幸运数字8
题目描述:
在我们的文化里面,有一些幸运数字。比如8有发的谐音,代表发财旺财运的意思,人们都觉得有这个数字是非常吉利的,会给自己带来好运,因此很多时候人们对于8有着非常强烈的钟爱,比如在选择手机号和车牌号的时候,包含着8的号码总是会被优先选择输入一个数,若存在数字8则输出:是幸运数字,否则输出:不是幸运数字。
输入描述:
输入一行一个整数。
输出描述:
若存在数字8则输出:是幸运数字,否则输出:不是幸运数字。
样例1:
输入:
233
输出:
不是幸运数字
[超平老师解读]:
本题考查的知识点是字符串的成员运算符in。
在Python中,要判断字符串是否包含某个指定字符,可以使用成员运算符in,结果返回布尔值。
[参考代码]:
需要注意,整数和字符的区别,此处不能直接写数字8,必须要加上引号。
第4题,摆放花盆
题目描述:
国庆节期间,学校操场上摆放了一排花盆,按照2盆菊花,4盆牡丹,2盆百日草的顺序排放,请问第n盆是什么花?
输入描述:
输入一行一个整数n表示第n盆花。
输出描述:
输入一行一个整数n表示第n盆花。
样例1:
输入:
9
输出:
菊花
[超平老师解读]:
本题考查的知识点包括列表和余数的应用。
根据题目的描述,花盆的摆放具有周期性,对于周期性问题,在编程实现中,使用余数运算即可。
这里的周期是8,正常情况下,直接 n % 8就可以确保结果的范围是0 ~ 7。由于列表的下标是从0开始的,所以需要将 n 先减去1,再进行取模运算。
[参考代码]:
第5题,玩石头游戏
题目描述:
你和你的朋友,两个人一起玩石头游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手,每一回合,轮到的人拿掉1-3块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。现在一共有n块石头,请判断你是否可以赢得游戏如果可以赢,输出win;否则,输出lose。
输入描述:
输入一行一个正整数n,表示石头的个数。
输出描述:
如果可以赢,输出win;否则,输出lose。
样例1:
输入:
4
输出:
lose
[超平老师解读]:
本题考查的是经典的必胜策略问题,关键在于如何将复杂问题转化为简单问题,并转换为数学模型,最后只需要判断n是否为4的倍数即可。
参考代码如下:
具体的分析请参考《玩石头游戏的必胜策略-2023年全国青少年信息素养大赛Python复赛真题精选》这篇文章。
第6题,卡牌游戏
题目描述:
有n张卡牌。第i张卡牌的位置是position[i]。
我们需要把所有卡牌移到同一个位置。在一步中,我们可以将第i张卡牌的位置从position[i]改变为:
position[i] + 2 或 position[i] - 2,此时的代价 cost = 0
position[i] + 1 或 position[i] - 1,此时的代价 cost = 1
现给出所有卡牌的位置,请你编程输出将所有卡牌移动到同一位置上所需要的最小代价。
输入描述:
输入一行正整数,每个数之间用空格间隔。
输出描述:
输出将所有卡牌移动到同一位置上所需要的最小代价。
样例1:
输入:
1 2 3
输出:
1
[超平老师解读]:
本题考查的是贪心算法的灵活运用,将题目描述的场景转化成一个简单的数学问题,最后只需要统计奇数和偶数的个数。
参考代码如下:
具体的分析请参考《运用贪心算法实现卡牌游戏-2023年全国青少年信息素养大赛Python复赛真题精选》这篇文章。
本次复赛一共6道编程题,题目由易到难,考查的知识点主要包括如下几个方面:
输入和输出,难点是一行多个数字的输入;
运算符,重点是取模;
字符串处理,重点是字符串的乘法;
列表的操作及运用,尤其是列表推导式;
贪心算法的编程思想;
这是小学4~6年级的复赛真题,对于小学生来说,还是挺有难度,尤其是最后两题,虽然代码简单,但是其分析过程并不简单。
如果仅从代码的角度来看,第5题和第6题也不难。但是,很多同学拿到题目后,却无从下手,那问题出在哪儿呢?
超平老师认为,编程语言只是实现想法的一个工具,只会简单的使用工具是无法解决实际问题。更为重要的是,我们要培养孩子的逻辑思维和数学思维能力,形成一套行之有效的分析问题、解决问题的思维模型。
唯有如此,孩子才能通过学习编程全方位提升自己的能力,在各种编程竞赛中脱颖而出。
这也是很多家长和老师困惑的问题,感觉孩子平时学得挺不错的,老师讲的也都会了,但是一参加比赛,成绩就不太理想。
所以,在进行少儿编程教学的过程中,除了编程语言本身之外,还需要注重逻辑思维和数学思维的培养和训练。
当然,每一道题都有多种解法,也请你多思考一下,有没有更好的思路和方法,欢迎和超平老师进行交流。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香
更多教程,可移步至“超平的编程课”gzh。