选择排序-第15届蓝桥第4次STEMA测评Scratch真题精选

2024-02-25 16:52

本文主要是介绍选择排序-第15届蓝桥第4次STEMA测评Scratch真题精选,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第172讲。

第15届蓝桥杯第4次STEMA测评已于2024年1月28日落下帷幕,编程题一共有6题,分别如下:

  • 青蛙过河

  • 巡逻的直升机

  • 栽花

  • 绘制风车

  • 专注力游戏训练

  • 选择排序

选择排序,本题是2024年1月28日举行的第15届蓝桥STEMA测评Scratch编程中级组编程第6题。题目要求编程实现扑克牌排序,在舞台上随机出现4张点数不同的扑克牌,依次将最小的牌移到第1、第2、第3和第4个位置。

先来看看题目的要求吧。

一.题目说明

编程实现:

排序。

具体要求:

1). 点击绿旗,在舞台上出现4张点数不同的扑克牌,牌上的点数是随机的(4-9点),如图所示;

图片

2). 最左侧第1张扑克牌与四张扑克牌中最小的牌交换位置(如果第1张牌是最小的则不需要交换位置),如图所示;

1秒后,最左侧第1张扑克牌与四张扑克牌中最小的牌交换位置(如果第1张牌是最小的则不需要交换位置),如图所示;

图片

3). 1秒后,第2张扑克牌与第2、3、4三张牌中最小的牌交换位置(如果当前第2张牌是三张牌中最小的则不需要交换位置),如图所示;

图片

4). 1秒后,第3张扑克牌与第3、4两张牌中较小的牌交换位置(如果当前第3张牌是较小的则不需要交换位置),之后排序完成,四张扑克牌从左到右按从小到大的顺序排列,而后程序结束,如图所示。

图片

评判标准:

  • 16分:满足"具体要求"中的1);

  • 28分:满足"具体要求"中的2);

  • 28分:满足"具体要求"中的3);

  • 28分:满足"具体要求"中的4)。

二.思路分析

本题只有1个扑克牌角色,如图所示:

图片

扑克牌有6个造型,牌面分别为4、5、6、7、8、9,如图:

图片

这是一道算法题,考查的知识点包括克隆、运动、列表和排序算法。

这里的重难点是排序算法,又是排序算法,是不是感觉很熟悉。没错,就是排序,在历届蓝桥真题中,排序已经出现了不下10次,可以说是老朋友了。

但是这一次对排序的方式有具体的要求,同时通过扑克牌展示具体的排序过程。

排序是编程中最常见的基础算法,关于排序的算法也挺多的,一共有10来种,包括选择排序、插入排序、冒泡排序、快速排序、希尔排序、归并排序、计数排序、基数排序、桶排序和堆排序等。

本题所描述的排序是选择排序,其核心思想是这样的:

  • 首先在未排序的数列中找到最小(或者最大)元素,然后将其存放到数列的起始位置;

  • 接着再从剩余未排序的元素中继续寻找最小(或者最大)元素,然后放到已排序序列的末尾;

  • 以此类推,直到所有元素均排序完毕。

其排序方式可以参考下图:

图片

选择排序很像我们打扑克牌时,把牌从左到右扫描,找到最小的一张牌,放到最左边,然后从第二张牌继续扫描第二小的牌,放到第二的位置,以此类推,直至所有的牌都排列好。

需要注意的是,在编程中,每次找到最小的牌时,需要交换两张牌的位置。由于每一轮只能处理一张牌,并且最后一张牌无需处理,所以对于n张扑克牌,需要进行n-1轮排序。

为了更好地理解选择排序,下面介绍如何使用扑克牌来演示详细的排序过程。

准备扑克牌一副,红蓝色棋子各一枚,为便于演示,取牌面为2、5、6、7、9的5张纸牌进行排序操作。将5张纸牌打乱顺序,假定牌面从左到右依次为7、9、5、2、6。

图片

由于每次都需要挨个比较找到最小的纸牌,因此5张牌需要进行4轮排序。

第1轮排序:

将红色和蓝色棋子放在左边第1张纸牌上方,标记为j,然后从红色棋子所在位置的下一张纸牌(j+1)开始,从左至右依次把每一张纸牌与蓝色棋子所在位置的纸牌进行比较,并将蓝色棋子放置在较小的纸牌上方。直到将红色棋子右边的纸牌全部比较一遍,此时蓝色棋子就停留在最小的纸牌上方。

然后将红色棋子和蓝色棋子所在位置的两张纸牌交换位置,至此完成第一轮排序,最小的一张纸牌2被移到正确位置,如图:

图片

第2轮排序:

将红色棋子和蓝色棋子放置于左边第2张纸牌上方(j=2),按照上述步骤进行比较,然后交换位置,在第二轮排序完成之后,纸牌5就移到了正确位置,如图:

图片

第3轮排序:

再将红色和蓝色两枚棋子置于左边第3张纸牌上方(j=3),重复上述过程,对纸牌进行比较和交换,完成第三轮排序后,纸牌6就移到了正确位置,如图:

图片

第4轮排序:

继续移动棋子,将它们放到左边第4张纸牌上方(j=4),继续前面的步骤,在第四轮排序完成之后,纸牌7就处于正确的位置,而剩下的纸牌9自然而然也就处于正确位置了,如图:

图片

至此,整个排序过程结束,5张扑克牌已经按照从小到大排好序了,依次为2,5,6,7,9。

排序过程中,这里的红色棋子和蓝色棋子是用来进行标记的,在编程时可以使用变量来表示。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分4步来编写程序:

  • 构造随机列表

  • 克隆纸牌

  • 实现选择排序

  • 交换纸牌

1. 构造随机列表

由于扑克牌是随机排列的,一共有6张扑克牌,要随机选4张,因此需要创建一个列表,将随机出来的4张扑克牌的点数存入列表。

为了方便,我们可以定义一个自制积木,用于构造随机列表,代码如下:

图片

代码不多,强调3点:

1). 每次都需要先清空列表;

2). 为了确保没有重复的数字,因此需要对随机出来的数字进行判断;

3). 列表中保存的扑克牌的牌面数字,不是造型编号。

2. 克隆纸牌

有了随机列表,就可以根据列表中的数字来依次克隆扑克牌了。

克隆本身比较简单,由于后续需要交换扑克牌的位置,因此还需要使用列表保存4张扑克牌的位置,同时使用私有变量对扑克牌进行编号,编号依次为1、2、3、4。

在绿旗下编写代码如下:

图片

简单说明两点:

1). 4张牌的y坐标是固定,只有x坐标不同,因此只需要保存x坐标;

2). 这里的变量”_ID“是私有变量,为了和全局变量进行区分,专门添加了下划线,这是一个好的编程习惯。

对应的,需要设置克隆体的造型,代码如下:

图片

代码比较简单,但需要注意,通过ID获取列表中的数字后,需要减去3。这是因为在”换成造型“指令中使用变量或运算时,优选匹配的是造型编号,而第一个造型对应的牌面是4,牌面数字和造型编号之间相差3。

执行代码,就可以实现4张扑克牌的随机排列。

3. 实现选择排序

接下来就是选择排序了,根据前面的思路分析,需要使用嵌套循环来实现。为了更好地组织代码,我们使用自制积木来实现排序,代码如下:

图片

代码比较多,说明5点:

1). 这是一个典型的两层循环结构,外层循环表示轮次,这里有4张牌,所以需要进行3轮排序;内层循环表示每一轮的比较过程; 

2). 每一轮比较,都需要记录最小值和最小值的下标(在列表中的编号),并且需要进行初始化。为了简单起见,这里直接将下标初始化为0,最小值则设为100,当然也可以设为其它值,只要比所有的牌面数字大就行;

3). 每一轮比较,都是从未排序的第一张牌开始,因此重复次数和轮数有关系,它等于5-轮数;

4). 每一轮比较完成,都会得到最小下标值,如果等于轮数,则说明不需要交换,否则需要交换,交换时,需要借助一个临时变量;

5 ). 每一次交换之前需要等待1秒,一旦列表中的数据交换完毕,就需要交换扑克牌了,所以发送了一个”交换“的广播,等待扑克牌交换位置后继续下一轮排序。

然后在绿旗指令的末尾使用这个自制积木,如图:

图片

4.交换纸牌

在接收到”交换“广播后,对应的两张牌需要交换位置,这里的难点是如何知道是哪两张牌呢,又是怎么交换位置的呢?

如果你做过洗牌发牌这道题,你会发现其实挺简单的,具体的分析可以参考《洗牌发牌-第14届蓝桥杯STEMA测评Scratch真题精选》这篇教程。

这里有两个列表,一个是四张牌的x坐标,另一个是四张扑克牌的数字,如图:

图片

两个列表的编号都是1、2、3、4,对于每张扑克牌而言,可以通过造型名称找到在”点数“列表中的编号,再通过这个编号到”x坐标“列表中找到其坐标,如此就可以确定每张扑克牌的x坐标了。

比如,第一次排序后,”点数“列表中的6和8进行交换,列表就变成了:

图片

对于扑克牌8来说,它在“点数”列表中的编号是4,对于扑克牌6来说,它的编号则是1,有了这两个编号,就可以确定其x坐标分别为180和-180,两种牌分别移到自己的位置即可。

交换之后,如图所示:

图片

这一下应该彻底理解了吧,代码其实就只有一行,如下:

图片

实际上,4张牌都会执行上述代码,只是另外两张扑克牌的x坐标没有发生变化而已。

至此,整个作品就创作好了,你可以运行程序来测试效果啦。

四.总结与思考

本题是中级组编程部分第6题,分数为100分,积木块数量75个左右,涉及到的知识点主要包括:

  • 列表运算;

  • 循环编程,尤其是嵌套循环;

  • 克隆编程;

  • 变量的使用,包括全局变量和私有变量;

  • 选择排序算法;

这是中级组最后一题,难度较大,完成时间30分钟左右,难点有两个,一是选择排序的算法思想和实现过程,二是如何交换扑克牌。

对于排序,已经无需再强调了,是100%要掌握的基础算法。对于初级组的考生来说,只需要掌握简单的排序即可,但是对中级组的考生而言,必须要掌握冒泡排序、选择排序和插入排序等经典算法。

同时还要强调一点,一些经典的场景在蓝桥比赛中会反复出现,比如这里的排序,这里的扑克牌交换位置,因此,我们一定要重视对历届真题的学习。

超平老师给你留一个思考题,选择排序和冒泡排序有何区别,哪种排序算法更好呢?

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要素材和源码的,可以移步至“超平的编程课”gzh。

这篇关于选择排序-第15届蓝桥第4次STEMA测评Scratch真题精选的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746096

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte