选择排序-第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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2808085.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达deeplearning.ai:Tensorflow训练一个神经网络

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai 在之前的博客中。我们陆续学习了各个方面的有关深度学习的内容,今天可以从头开始训练一个神经网络了。 Tensorflow训练神经网络模型 我们使用之前用过的例子: 这个神经…

SSM项目集成Spring Security 4.X版本 之 加入DWZ,J-UI框架实现登录和主页菜单显示

目录 前言 一、加入DWZ J-UI框架 二、实现登录页面 三、实现主页面菜单显示 前言 大家好!写文章之前先列出几篇相关文章。本文内容也在其项目中接续实现。 一. SSM项目集成Spring Security 4.X版本(使用spring-security.xml 配置文件方式&#xff…

HDL FPGA 学习 - Quartus II 工程搭建,ModelSim 仿真,时序分析,IP 核使用,Nios II 软核使用,更多技巧和规范总结

目录 工程搭建、仿真与时钟约束 一点技巧 ModelSim 仿真 Timing Analyzer 时钟信号约束 SignalTap II 使用 In-System Memory Content Editor 使用 记录 QII 的 IP 核使用 记录 Qsys/Nios II 相关 记录 Qsys 的 IP 核使用 封装 Avalon IP 更多小技巧教程文章 更多好…

TF-IDF,textRank,LSI_LDA 关键词提取

目录 任务 代码 keywordExtract.py TF_IDF.py LSI_LDA.py 结果 任务 用这三种方法提取关键词,代码目录如下, keywordExtract.py 为运行主程序 corpus.txt 为现有数据文档 其他文件,停用词,方法文件 corpus.txt 可以自己…

手把手教你,设置IDEA实现SSH远程连接Linux服务器

前言 工作中,偶尔会遇到需要连接远程Linux环境进行开发。这篇文章就介绍一下如何在IDEA中设置远程连接服务器开发环境,并结合Cpolar内网穿透工具实现无公网远程连接,实现远程开发。 IDEA的远程开发功能,可以将本地的编译、构建、…

神经网络系列---常用梯度下降算法

文章目录 常用梯度下降算法随机梯度下降(Stochastic Gradient Descent,SGD):随机梯度下降数学公式:代码演示 批量梯度下降(Batch Gradient Descent)批量梯度下降数学公式:代码演示 小…

【监督学习之逻辑回归】

曾梦想执剑走天涯,我是程序猿【AK】 目录 简述概要知识图谱1.什么是逻辑回归?2.逻辑回归有哪些应用?3.回归分析如何工作?4.逻辑回归模型如何工作?5.逻辑回归分析有哪些类型?6.逻辑回归与其他机器学习技术相…

网络编程、UDP、TCP

计算机网络 就是将地理位置不同的具有独立功能的多台计算及外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件以及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 目的 传播交流信息、数据交换、通信 如何做…

算法分析-面试1-字符串

文章目录 前言一、分类:看看就行了二、字符串API:创建和初始化:查询操作:比较操作:修改操作:截取操作:分割操作:格式化操作:连接操作(Java 8 及以后&#xff…

给大家分享一款小程序:AI一秒修图

AI一秒修图 照片修复的AI助手特点:Demo(1.选择图片 2.涂抹遮罩 3.消除)Product Roadmap (版本演进)Contact-联系我们Reference 照片修复的AI助手 照片修复小小助手是一款快速P图微信小程序,用来消除图片中指定的人和物&#xff…

人工智能绘画的时代下到底是谁在主导,是人类的想象力,还是AI的创造力?

#ai作画 目录 一.AI绘画的概念 1. 数据集准备: 2. 模型训练: 3. 生成绘画: 二.AI绘画的应用领域 三.AI绘画的发展 四.AI绘画背后的技术剖析 1.AI绘画的底层原理 2.主流模型的发展趋势 2.1VAE — 伊始之门 2.2GAN 2.2.1GAN相较于…

软考43-上午题-【数据库】-关系代数转SQL语言

一、投影转SQL语言-select 示例: 二、选择转SQL语言-where 示例: 【注意】: 关系代数公式的写法,可以写属性名,也可以写列的序号,如: 但是,SQL语言不支持!!&a…

软件设计师软考题目解析05 --每日五题

想说的话:要准备软考了。0.0,其实我是不想考的,但是吧,由于本人已经学完所有知识了,只是被学校的课程给锁在那里了,不然早找工作去了。寻思着反正也无聊,就考个证玩玩。 本人github地址&#xf…

H5多用途的产品介绍展示单页HTML5静态网页模板

H5多用途的产品介绍展示单页HTML5静态网页模板 源码介绍:一款H5自适应多用途的产品介绍展示单页HTML静态网页模板,可用于团队官网、产品官网。 下载地址: https://www.changyouzuhao.cn/13534.html

作业 找单身狗2

方法一: 思路: 我们可以先创建一个新的数组,初始化为0,然后让原来的数组里面的元素作为新数组的下标 如果该下标对应的值为0,说明没有出现过该数,赋值为1作为标记,表示出现过1次 如果该下标…

掌握BeautifulSoup4:爬虫解析器的基础与实战【第91篇—BeautifulSoup4】

掌握BeautifulSoup4:爬虫解析器的基础与实战 网络上的信息浩如烟海,而爬虫技术正是帮助我们从中获取有用信息的重要工具。在爬虫过程中,解析HTML页面是一个关键步骤,而BeautifulSoup4正是一款功能强大的解析器,能够轻…

Java8 Stream API 详解:流式编程进行数据处理

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…

Go语言必知必会100问题-03 滥用init函数

滥用init函数 在Go语言中,滥用init函数会导致难以理解的代码流和槽糕的错误处理。本文将对init函数进行一个梳理,什么是init函数以及推荐的使用场景。 init函数 init函数是一个不带参数并且无返回结果的函数(func()函数)。初始…

[云原生] 二进制安装K8S(上)搭建单机matser、etcd集群和node节点

一、单机matser预部署设计 目前Kubernetes最新版本是v1.25,但大部分公司一般不会使用最新版本。 目前公司使用比较多的:老版本是v1.15,因为v1.16改变了很多API接口版本,国内目前使用比较多的是v1.18、v1.20。 组件部署&#xff…

【Linux】部署单机项目(自动化启动)

目录 一.jdk安装 二.tomcat安装 三.MySQL安装 四.部署项目 一.jdk安装 1.上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录,将安装包拖进去 2.解压安装包 防止后面单个系列解压操作,我这边就直接将所有的要用的全部给解压,如下图注…