[导读]:这是Scratch蓝桥杯真题解析第108讲。蓝桥杯选拔赛现已更名为STEMA,即STEM 能力测试,是蓝桥杯大赛组委会与美国普林斯顿多文化教育研究中心合作推出的考试项目。STEM能力测试致力于综合评价学生的 STEM 水平,对学生的科技素养、逻辑思维和编程能力等三方面进行客观科学的测试。
列表排序,本题是2022年12月18日举行的第14届蓝桥杯STEMA考试Scratch图形化编程真题中级组编程部分第5题,是中级组最后一题。题目要求编程实现列表排序,先向列表中插入5个不重复的数字,然后按照从小到大的顺序进行排序,最后逐个判断是否为3和5的倍数。
先来看看题目的要求吧。
一.题目说明
编程实现:
列表排序。
具体要求:
1). 运行程序,角色、背景如图所示(创建一个“数据”列表);
2). 等待1秒后,在1-100中随机生成5个不重复数字加入到“数据”列表中;
3). 按下空格键,“数据”列表中的5个数字按照从小到大的顺序进行排序;
4). 等待1秒后,小猫依次说出5个数字是否是3的倍数、5的倍数;
5). 程序持续重复2)、3)、4)步骤。
评判标准:
- 3分:满足”具体要求”中的1);
- 5分:满足”具体要求”中的2);
- 6分:满足”具体要求”中的3);
- 11分:满足”具体要求”中的4);
- 5分:满足”具体要求”中的5)。
二.作品效果
在编程之前,先来看一下作品的完整效果吧:
三.思路分析
本题只有1个角色,就是默认的小猫,如图所示:
根据题目描述,可以将作品的功能分成如下三个方面:
- 初始化列表
- 列表排序
- 判断是否为3和5的倍数
其中初始化列表,就是向列表中插入5个1~100之间的随机数,不过要避免重复数字,所以在插入数据的时候,需要做一个判断。判断是否为3和5的倍数也比较简单,考察的是数学中的除法和余数知识,在Scratch中,专门提供了一个计算余数的指令,如图:
列表排序是这里的重难点,排序是编程中最常见的基础算法,关于排序的算法也挺多的,常见的经典排序算法有选择排序、插入排序、冒泡排序和快速排序等。其中选择排序相对简单一些,其实现原理和步骤可以参考《考试成绩系统-第12届蓝桥杯Scratch省赛2真题第5题》这篇教程。今天,超平老师再介绍一种更为简单的排序算法,保证你肯定听得懂、学得会、还能快速地写出程序。列表中的数字范围在1~100之间,我们不妨从100开始,将列表中的5个数字逐一进行比较,如果某一项等于100,说明这一项就是最大的数字,如图所示:
此时,可以先将100从列表中删除,然后再将100插入到列表的最前面,如图:
一轮循环结束之后,再用99和列表中的每一项进行比较,如果没有相等的列表项,则不做任何操作。不断地重复这个过程,把100~1之间所有的数字都循环处理一遍,就可以得到一个从小到大排列的有序列表了。
怎么样,这个算法是挺简单的吧。
接下来,我们就进入具体的编程实现环节。
四.编程实现
根据题目描述和思路分析,我们可以分3步来编写程序:
- 初始化列表
- 列表排序
- 判断是否为3和5的倍数
为了简化代码结构,也为了更好的讲解,针对上述3个功能,分别使用一个自制积木来实现,对应的主程序如图所示:
相应的,需要先创建好列表”数据“,并清空列表。1. 初始化列表初始化列表自制积木的代码如下:
需要注意的是,第一次列表是空的,可以直接向列表中插入一个1~100之间随机数,但是从第二次开始,后续的4次就不能直接插入随机数了,而应该进行判断,如果随机的数字已经有了,则需要重新随机一个数字,从而避免插入重复的数字。
2. 列表排序
根据前面的思路分析,我们从100开始,逐个和列表中的每一项进行比较,这需要使用嵌套循环,具体的代码如下:
在嵌套循环中,使用了两个变量,一个是i,一个是j,其中i用于外层循环,从100开始,每执行一次,就减去1,重复100次。而j则用于内层循环,表示列表的编号,每一次都是从第一项开始,重复5次,将列表中的每一项数据都比较一遍。
3. 判断是否为3和5的倍数
一个数字是否为3和5的倍数,可以分成如下4种组合情况:
- 既是3的倍数,也是5的倍数
- 是3的倍数,不是5的倍数
- 是5的倍数,不是5的倍数
- 既不是3的倍数,也不是5的倍数
而且这四种组合是互相排斥的,也就是只能满足其中一种情况,所以比较好的做法就是使用双分支条件指令”如果…那么…否则“,并通过嵌套的方式区分4种不同的情况。
判断的方法也非常简单,直接使用计算余数指令即可,具体的代码如下所示:
注意,对于同时满足条件的情况,需要使用逻辑与指令。至此,我们的列表排序作品就创作好了,感觉也不是很难吧
五.总结与思考
本题是中级组最后一题,分数为30分,积木块数量72个左右 ,涉及到的知识点主要包括:
- 列表的操作,包括列表数据的插入和删除;
- 使用循环结合变量遍历列表;
- 随机数的运用;
- 除法和余数,重点是计算余数的指令;
- 逻辑与运算;
- 循环嵌套和条件嵌套。
这是中级组最后一题,难度较大,考察的重点是列表操作,尤其是排序,如果之前没有接触过排序,基本上是做不出来的。
关于列表排序,是必备的编程技能,也是孩子踏入算法殿堂的第一道门槛,在蓝桥杯竞赛中,已经出现过好几次了。比如第10届省赛中的《列表排序-第10届蓝桥杯Scratch省赛真题第6题》,还有第12届省赛中的《考试成绩系统-第12届蓝桥杯Scratch省赛2真题第5题》,可见排序算法的重要性,你可以好好掌握哦。
当然,排序算法众多,这里只是介绍了一种比较简单的方式,后续超平老师会继续讲解其它几种算法实现,请持续关注。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香