[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第63讲。
第10届蓝桥杯青少年组省赛于2019年3月24日举行,形式为线下考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
列表排序,本题是第10届蓝桥杯Scratch省赛真题编程第6题,是初级组最后一题,中级组也有此题,题目要求考生使用Scratch编程对列表排序,在列表 1 中生成 5 个在 1~99 范围内的随机整数,然后按照从大到小的顺序将它们依次移到列表 2 中。
先来看看题目的要求吧。
一.题目说明
编程实现:
老师给小猫出了一道题:在列表 1 中生成 5 个在 1~99 范围内的随机整数,然后按照从大到小的顺序将它们依次移到列表 2 中。
例如:在列表 1 中随机生成的整数依次是“12,3,1,13,17”,在处理之后列表 2 中的整数依次是“17,13,12,3,1”。
![图片[1]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-210-1024x461.png)
具体要求:
1、每次点击绿旗后,在屏幕中都显示如图-1 所示的列表 1 和列表 2,且在列表 1 中随机生成 5 个在 1~99范围内的随机整数,而列表 2 中内容为空。然后小猫说“5 秒钟后开始处理”,并等待 5 秒钟;
2、处理数据时,每间隔 1 秒钟,都将列表 1 中当前最大的一个数字移动到列表 2 中,注意:是移动,不是复制;
3、当处理到列表 1 为空后,列表 2 中的数据应从大到小排列,如图-2 所示,然后小猫说“处理完啦。”2秒钟,然后程序结束。
将程序保存到桌面,命名为“6.sb2”。
评判标准:
- 10 分:点击绿旗后,在列表 1 中正确生成了 5 个随机的整数(裁判可多次点击绿旗来验证是否随机)。且小猫说“5 秒钟后开始处理”,并等待 5 秒钟;
- 30 分:在 10 分标准的基础上,开始处理后,每 1 秒钟都将列表 1 中当前最大的数字移动到列表 2 中,但不是每次都移动最大数字或者移动到列表 2 中后顺序不是从大到小,或者处理完成后小猫没有说“处理完啦。”2 秒钟;
- 50 分:完全符合题意。
二.效果预览
在编程之前,先来看看作品的完整效果吧:
三.思路分析
这是一道纯算法题,针对列表1中的5个数据,每一次找到最大的那个数字,将其移到列表2中,解决问题的核心在于,如何找到最大数。
最简单的方就是逐个比较,每次将列表的第一个数字作为最大数,然后从列表的第二个数字开始,逐个比较,如果比第一个数字大,则该数字为最大数字,直到所有的数字都比较完毕,这部分的流程图如下:
![图片[2]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-211-720x1024.png)
注意,这只是比较一轮的流程图,一轮比较完毕,max变量中保存的就是最大的那个数字,我们将max插入到列表2中,同时将列表1中等于max的数字删除,重复执行5次,就可以完成整个排序过程。
四.编程实现
根据题目描述和思路分析,我们可以分两步来编写程序:
- 随机生成列表1数据
- 依次将数据移到列表2中
1. 随机生成列表1数据
首先创建两个列表,分别命名为”列表1“和”列表2“,当绿旗被点击时,将列表清空,然后向列表1中插入5个随机数,随机数的范围在1~99之间,这部分的代码如下:
![图片[3]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-212.png)
执行完这段代码,列表1中就会有5个随机数字,这时候的数字是乱序的,如图:
![图片[4]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-213.png)
2. 依次将数据移到列表2中
根据前面的思路分析,我们先创建两个变量,分别命名为”max“和”i“,如图:
![图片[5]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-214.png)
其中,max表示最大数字,i是循环计数器,通过i可以取出列表中的每一个数字。我们先来完成一轮比较及移动操作,根据流程图,编写代码如下:
![图片[6]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-215.png)
将最大数字加入到列表2中比较简单,值得注意的是如何从列表1中删除最大数。此处使用了组合指令,其中一个指令是”列表中的第一个xx的编号“,通过该指令,我们就可以找到最大数对应的编号,有了编号,删除列表项就非常简单了,只需要使用指令”删除列表的第x项“即可。
还有一点需要说明,由于max是列表的第1项,所以我们是从第2项开始比较,所以i的初始值设为了2,总的比较次数也减少一次,即”列表1的项目数 – 1“次。
列表一共有5个数字,所以,我们需要把这个比较重复5次,每次间隔1秒,排序完毕,说一句”处理完啦!“,代码如下:
![图片[7]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-216.png)
将这段代码和第一步中的代码连起来,整个程序就完成了。
五.总结与思考
本题难度系数为5,积木块数量在30个左右,涉及到的知识点主要包括:
- 列表的操作,包括清空、插入、查找编号、删除指定项等;
- 结合循环和变量遍历列表,注意计数器的概念;
- 随机数指令的使用;
- 循环嵌套;
- 选择排序的算法思想。
作为一道纯算法题,本题的难度不小,实际上,这是算法中经典的选择排序的简化版本。之所以说是简化版本,是因为这里使用了两个列表,每次找到列表1中最大的那个数,然后移到列表2中。如果只有一个列表,要将列表中的随机数据按照从大到小或者从小到大的顺序依次排列,这就是经典的选择排序了,你知道如何实现吗,要不要挑战一下^_^。
需要素材和源代码的,可以转到这里,列表排序-2019.3.24蓝桥杯省赛第6题。
暂无评论内容