列表排序-第10届蓝桥杯Scratch省赛真题第6题

[导读]:超平老师计划推出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省赛真题解析教程-超平的编程课

具体要求:

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省赛真题解析教程-超平的编程课

注意,这只是比较一轮的流程图,一轮比较完毕,max变量中保存的就是最大的那个数字,我们将max插入到列表2中,同时将列表1中等于max的数字删除,重复执行5次,就可以完成整个排序过程。

四.编程实现

根据题目描述和思路分析,我们可以分两步来编写程序:

  • 随机生成列表1数据
  • 依次将数据移到列表2中

1. 随机生成列表1数据

首先创建两个列表,分别命名为”列表1“和”列表2“,当绿旗被点击时,将列表清空,然后向列表1中插入5个随机数,随机数的范围在1~99之间,这部分的代码如下:

图片[3]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课

执行完这段代码,列表1中就会有5个随机数字,这时候的数字是乱序的,如图:

图片[4]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课

2. 依次将数据移到列表2中

根据前面的思路分析,我们先创建两个变量,分别命名为”max“和”i“,如图:

图片[5]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课

其中,max表示最大数字,i是循环计数器,通过i可以取出列表中的每一个数字。我们先来完成一轮比较及移动操作,根据流程图,编写代码如下:

图片[6]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课

将最大数字加入到列表2中比较简单,值得注意的是如何从列表1中删除最大数。此处使用了组合指令,其中一个指令是”列表中的第一个xx的编号“,通过该指令,我们就可以找到最大数对应的编号,有了编号,删除列表项就非常简单了,只需要使用指令”删除列表的第x项“即可。

还有一点需要说明,由于max是列表的第1项,所以我们是从第2项开始比较,所以i的初始值设为了2,总的比较次数也减少一次,即”列表1的项目数 – 1“次。

列表一共有5个数字,所以,我们需要把这个比较重复5次,每次间隔1秒,排序完毕,说一句”处理完啦!“,代码如下:

图片[7]-scratch列表排序_第10届蓝桥杯scratch省赛真题解析教程-超平的编程课

将这段代码和第一步中的代码连起来,整个程序就完成了。

五.总结与思考

本题难度系数为5,积木块数量在30个左右,涉及到的知识点主要包括:

  • 列表的操作,包括清空、插入、查找编号、删除指定项等;
  • 结合循环和变量遍历列表,注意计数器的概念;
  • 随机数指令的使用;
  • 循环嵌套;
  • 选择排序的算法思想。

作为一道纯算法题,本题的难度不小,实际上,这是算法中经典的选择排序的简化版本。之所以说是简化版本,是因为这里使用了两个列表,每次找到列表1中最大的那个数,然后移到列表2中。如果只有一个列表,要将列表中的随机数据按照从大到小或者从小到大的顺序依次排列,这就是经典的选择排序了,你知道如何实现吗,要不要挑战一下^_^。


需要素材和源代码的,可以转到这里,列表排序-2019.3.24蓝桥杯省赛第6题

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容