最大的三位数-第15届蓝桥第5次STEMA测评Scratch真题精选

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

如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。

第15届蓝桥杯第5次STEMA测评已于2024年3月10日落下帷幕,编程题一共有6题(初级组只有前5道编程题),分别如下:

最大的三位数,本题是2024年3月10日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第4题,题目要求编程创作最大的三位数作品。黑板上有一个四位数,请擦除其中一个数字,使得剩余数字组成的三位数最大。

先来看看题目的要求吧。

一.题目说明

编程实现:

最大的三位数。

黑板上有一个四位数,请擦除其中一个数字,使得剩余数字组成的三位数最大。

图片

具体要求:

1). 点击绿旗,黑板上显示一个随机的四位数,如图所示;

例如:随机的四位数为7971。

图片

2). 1秒后,老师说“请擦除一个数字”,如图所示;

图片

3). 鼠标点击黑板擦后,黑板擦会持续跟随鼠标移动,如图所示;

图片

4). 把黑板擦移动到想要擦除的数字上,点击鼠标左键,黑板擦会在该数字处上下滑动擦除该数字;(参考视频)

5). 黑板擦在擦除的过程中,该数字越来越模糊,最终留下一个很浅的痕迹,如图所示;(参考视频)

图片

6). 之后黑板擦回到最初的位置,如图所示;

图片

7). 如果擦除后得到的三位数最大,那么老师说“正确”;

8). 如果擦除后得到的三位数不是最大的,那么老师说“错误”。

评判标准:

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

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

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

  • 10分:满足"具体要求"中的4);

  • 6分:满足"具体要求"中的5);

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

  • 12分:满足"具体要求"中的7);

  • 12分:满足"具体要求"中的8)。

二.思路分析

本题提供了3个角色,分别是数字、老师和黑板擦,如图所示:

图片

其中,数字角色有10个造型,分别表示10个数字,如图:

图片

本题考查的知识点比较多,包括克隆、运动、事件广播和变量等。

我们可以分角色来分析,其中老师角色最简单,他就像一个主持人一样,负责开场和收尾,开始说了一句”请擦除一个数字“,最后判断擦除的数字是否正确。

其次是黑板擦角色,有两个小功能,一是在鼠标点击后跟随鼠标移动,二是上下移动,模拟擦除的动作。

数字角色是这里的重头戏,看起来好像只是一个简单的克隆和变淡效果,实际上还包含大量的数据处理和逻辑判断。

此处,超平老师需要强调一个重要的编程思想-数据驱动显示,即先有数据,然后再考虑角色的显示效果。

数据处理和逻辑判断是本作品的难点,我们可以从拆分成如下3个小模块:

1). 随机一个四位数

2). 计算出最大的三位数

3). 计算擦除任意数字后的三位数

第一步,比较简单,直接使用变量,并通过随机指令进行初始化,范围是1000~9999,如下:

图片

第二步,要计算最大的三位数,其实就是分别去掉千位、百位、十位和个位,然后逐个比较一遍,就可以得到最大的三位数。

比如,随机得到的四位数是5648,得到的三位数分别为:

去掉千位:648去掉百位:548去掉十位:568去掉个位:564

经过比较,可以发现最大的三位数是648,注意不是去掉最小数字就可以得到最大三位数的。

具体如何比较呢,这个可以结合第三步一起考虑。

第三步,计算擦除任意数字后的三位数,还是以四位数5648为例进行说明:

擦除第1个数字:648擦除第2个数字:548擦除第3个数字:568擦除第4个数字:564

看到这里,你想到了什么?

是不是和前面获取最大三位数时去掉千位、百位、十位和个位完全一样,难道要重新再来一遍?

很显然,这是不必要的,在编程中,使用变量(包括列表)可以避免做一些重复的工作。

不妨使用一个列表,将三位数按顺序依次保存起来,如下:

图片

有了这个列表,就要方便多了,遍历整个列表,就可以找到最大的三位数。更重要的是,当擦除任意个数字时,我们只需要知道该数字是第几个,就可以直接通过编号获取擦除后的三位数了。

如何知道是第几个数字呢,其实也非常简单,在克隆的时候,使用私有变量,给每个数字进行编号,从左到右依次为1、2、3、4。

如此一来,在擦除某个数字的时候,就可以通过编号获取擦除后的三位数了,再使用变量保存起来,如下:

图片

只需要一行代码就可以了,是不是非常的巧妙。

最大的三位数和擦后的三位数都有了,老师角色在判断的时候,就可以根据这两个变量是否相等来提示正确和错误了。

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

三.编程实现

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

  • 随机四位数并获取最大三位数

  • 克隆数字

  • 老师提示擦除数字

  • 黑板擦擦除数字

  • 老师判断结果

1. 随机四位数并获取最大三位数

首先,创建两个变量“四位数”和“最大三位数”,将四位数设置为1000~9999之间的随机数。

再建立一个列表“三位数”,将4个三位数保存到列表中。由于计算最大三位数的代码有点多,我们创建一个自制积木来简化代码结构。

创建自制积木并编写代码如下:

图片

代码比较多,简单说明两点:

1). 为了方便,这里创建了4个变量,分别用来表示四位数的千位、百位、十位和个位;

2). 列表在使用之前一定要清空;

3). 在向列表中插入数据的时候,一定要注意组合的顺序,确保是依次去掉千位、百位、十位和个位;

4). 在获取最大三位数时,先将最大值设置为0,然后遍历列表逐一比较,并更新最大值。

执行这段代码,就可以获取最大三位数,并将擦除后的4个三位数保存到列表中了。

2. 克隆数字

有了四位数,就可以根据四位数来克隆数字了,为了方便,我们使用自制积木来组织代码,对应的代码如下:

图片

代码不多,强调一点,这里的_ID是私有变量,用来给数字进行编号,编号依次为1、2、3、4。

然后在数字角色的绿旗指令中编写代码如下:

图片

注意代码的顺序,必须是先设置变量,接着调用“获取最大三位数”积木,最后是“克隆数字”。

对应的,设置好克隆体的造型,并显示,代码如下:

图片

执行代码,就可以看到克隆好的四位数字了,如图:

图片

3. 老师提示擦除数字

接下来,是老师提示要擦除数字,这一步非常简单,切换到老师角色,编写代码如下:

图片

4. 黑板擦擦除数字

黑板擦开始位于黑板左下方,在鼠标点击后会跟随鼠标移动,在碰到某个数字时点击鼠标才停止下来。

切换到黑板擦角色,编写代码如下:

图片

代码不多,但非常有技巧性,强调两点:

1). 点击黑板擦,不要使用”当角色被点击“指令,避免反复点击;

2). 对于循环,能使用”重复执行直到“指令,就不要使用”重复执行“指令,代码会简单不少。

然后就是擦除的效果,分为两个部分,一是黑板擦的上下移动效果,二是数字的变淡效果。

而且这两个动作是同步的,需要在黑板擦移动之前给数字角色发送一个广播消息。

为方便起见,我们先实现黑板擦的移动效果,在上面的代码块下面,继续编写代码如下:

图片

代码不难,说明四点:

1). 一定要在重复移动之前发送“擦除”广播,确保数字变淡和黑板擦擦除的效果是同步的;

2). 上下移动的方式,除了改变y坐标,还可以使用滑行指令,确保效果一致即可;

3). 在擦除结束后,黑板擦要回到黑板左下方;

4). 整个动作完成后,发送了一个“判断”的广播,这个也可以放在数字角色中;

对应的,切换到数字角色,编写代码如下:

图片

代码比较简单,强调两点:

1). 由于所有的数字克隆体都能接收广播消息,因此需要判断,只有碰到黑板擦的数字才是我们需要的;

2). 虚像特效增加的大小和次数可以自行调整,确保效果和参考视频一致即可;

5. 老师判断结果

最后一步,比较简单,老师角色在接收到”判断“的广播后,比较两个变量即可。切换到老师角色,编写代码如下:

图片

至此,整个作品就创作好了,赶紧运行程序看看效果吧。

四.总结与思考

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

  • 运动编程;

  • 克隆编程;

  • 变量,尤其是私有变量;

  • 事件广播机制;

  • 列表的灵活运用;

本题难度较大,综合性非常强,完成时间30分钟左右。这里的难点是如何判断擦除是否正确,具体来说就是如何获取最大的三位数及擦除后的三位数。

我们巧妙地使用列表将所有的三位数保存到列表中,一来便于比较得到最大的三位数,二来可以直接获取擦除后的三位数,可以说是一举两得,这就是列表的强大和美妙之处。

再来说说考试策略问题,这道题可以说是本次测评中最难的一道题目,不少考生花费了大量时间,结果还是完成得不好,碰到这种情况该怎么办呢?

其实,每一次考试都有可能出现这种情况,最难的一题(准确来说,是对你来说最难的一题)并不是总是最后一题。

面临这种情况,一不要硬抗到底,摆出一副不做出来不罢休的架势,二不要直接跳过,干脆避而不见。

最佳策略是以最快的时间完成一部分,对于本题而言,题目要求有8条,如果去掉最后两条要求,是不是就简单多了。

争取把前面的部分都完成,也可以拿到36分了。而最后的两条要求一共是24分,但是会花掉你30分钟的时间,肯定不划算,你要知道,后面的题目分值更高呢,切不可因小失大。

超平老师给你留一道思考题,如果我们找到四位数中的最小数字,然后判断擦除的数字是否为最小数字,能否行得通呢,为什么?

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

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

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 07:00:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 07:00:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 07:00:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 07:00:04       20 阅读

热门阅读

  1. C#WPF设置圆角按钮样式

    2024-04-02 07:00:04       14 阅读
  2. ElasticSearch的DSL查询

    2024-04-02 07:00:04       13 阅读
  3. linxu tensorflow-1.13.1 C++动态库编译

    2024-04-02 07:00:04       13 阅读
  4. 介绍 TensorFlow 的基本概念和使用场景

    2024-04-02 07:00:04       12 阅读
  5. 【OpenCV-环境搭建】

    2024-04-02 07:00:04       15 阅读
  6. 【C/C++】C语言实现顺序表

    2024-04-02 07:00:04       14 阅读
  7. 手搓ajax的封装

    2024-04-02 07:00:04       17 阅读
  8. npm常用命令详解

    2024-04-02 07:00:04       14 阅读
  9. js怎样获取到时间戳?

    2024-04-02 07:00:04       13 阅读
  10. 给手机换电池、贴膜:VIVO服务还是非常好的

    2024-04-02 07:00:04       60 阅读
  11. R语言基础入门教程

    2024-04-02 07:00:04       13 阅读