字母不重复的子串-第15届蓝桥第二次STEMA测评Scratch真题精选

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

第15届蓝桥第2次STEMA测评已于2023年10月29日落下帷幕,编程题一共有6题,分别如下:

  • 旅游相册

  • 隐身的小鸟

  • 摩天轮

  • 找不同游戏

  • 字母不重复的子串

  • 卡片排列

字母不重复的子串,本题是2023年10月29日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第5题,题目要求编程找出给定字符串中字母不重复的子串。

先来看看题目的要求吧。

一.题目说明

背景信息:

子串为一个字符串的一段连续的部分。

例如:

字符串为abbcd

abbcd的子串有:a、ab、abb、abbc、abbcd、b、bb、bbc、bbcd、 bc、 bcd、c、cd、d

其中,子母不重复的子串有:a、ab、b、bc.、bcd、c、cd、d

编程实现:

字母不重复的子串。

具体要求:

1). 点击绿旗,角色、背景如图所示(列表“子串”为空);

图片

2). 鼠标点击机器人后,机器人询问“请输入一串小写字母”,如图所示;

图片

3). 输入完成后,列表中出现字母不重复的所有子串;

例如:输入为abbcd

图片

4). 最后,机器人说出列表中最长子串的长度,如图所示;

图片

评判标准:

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

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

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

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

二.思路分析

本题只有1个角色,就是机器人,如图所示:

图片

机器人也没有什么特别的动作,就是将玩家输入的字符串进行处理,得到相应的结果。

我们可以将本题归入算法题,考查的是字符串和列表的相关运算及灵活运用。

根据题目的描述,我们可以把字符串的处理拆分成如下3个过程:

  • 获取所有的子串

  • 去重处理

  • 计算最长子串长度

为了更好地理解这3个过程,超平老师以本题的输入样例来说明,即输入的字符串是abbcd。

1. 第一步,获取所有的子串

即获取a、ab、abb、abbc、abbcd、b、bb、bbc、bbcd、 bc、 bcd、c、cd、d等子串,一共有14个。

要获取所有的子串,需要用到循环,而且是嵌套循环,我们可以使用表格将这个过程绘制出来。

字符串abbcd的长度为5,一共需要循环5次。

第1次循环,从第1个字符a开始,获取所有的子串,包括a、ab、abb、abbc、abbcd,一共5个,存入列表。

图片

第2次循环,从第2个字符b开始,获取所有的子串,包括b、bb、bbc、bbcd,一共有4个,存入列表。

图片

第3次循环,从第3个字符b开始,获取所有的子串,包括b、bc、 bcd,一共有3个,存入列表。

图片

第4次循环,从第4个字符c开始,获取所有的子串,包括c、cd,一共有两个,存入列表。

图片

第5次循环,从第5个字符d开始,获取所有的子串,包括d,一共有1个,存入列表。

图片

按照上面的过程,存入列表的子串一共有 5 + 4 + 3 + 2 + 1 = 15个,但实际上只有14个,哪里不对劲呢?

聪明的你肯定已经发现了,这里有两个子串b,所以如果两个字符串完全相同,在存入列表的时候只能添加一次。

2. 第二步 ,去重处理

上面的字符串中,有些组合是有相同的字母,比如abb、abbc、bb等,需要将这些字符串过滤掉,最后得到8个子串,a、ab、b、bc.、bcd、c、cd、d。

去重的思路很简单,就是对于一个给定的字符串,只需要判断其中是否有相同字母即可,具体怎么判断呢?

我们可以借助一个临时列表,对字符串进行遍历,每次获取一个字母,如果临时列表中包含它,就说明有重复字母,否则就将其添加到临时列表中。

3. 第三步,计算最长子串长度

在第二步的基础上,计算最长子串的长度,很显然,在上面的8个子串中,bcd是最长的子串,其长度为3。

这一步比较简单,增加一个变量“最大长度”,先将其设为0,在插入列表的时候,逐个判断,如果当前子串的长度大于最大长度,则更新最大长度的值。

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

三.编程实现

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

  • 准备工作

  • 获取所有子串

  • 去重处理

  • 计算最长子串长度

1. 准备工作

创建好列表“子串”和变量“最大长度”,在机器人角色中编写代码如下:

图片

2. 获取所有子串

点击角色,出现询问框,当输入一串小写字母,根据前面的思路分析,需要使用嵌套循环,将子串组合起来,添加到列表中。

在机器人角色中编写代码如下:

图片

代码有点多,说明如下:

1). 这是一个典型的两层嵌套循环,外层的循环次数通过变量"i"来控制,内层的循环次数通过变量"j"来控制,在编程中,通常将这样的变量称作计数器;

2). 每次需要获得一个子字符串,这里的变量“字符串”,用来表示一个子串, 每次都将其初始值设置为空;

3). 子串组合的过程其实就是字符串的拼接,会用到字符串连接运算符;

4). 每得到一个子字符串,就将其添加到列表中;

5). 不要忘了计数器变量"i"和"j"增加1;

可以先测试一下效果,结果如下:

图片

很显然,这里有两个相同的子串b,没有进行过滤,所以在插入列表的时候,需要增加一个判断,只有当列表中没有该子串时才能插入,代码如下:

如此一来,就可以确保没有相同的子串了。

3. 去重处理

根据前面的思路分析,我们可以借助一个临时列表来去重,先创建好“临时列表”,对于给定的一个字符串,需要判断是否有相同字母。

为了方便,我们可以使用自制积木来实现这一功能,然后使用全局变量"flag"来表示是否有重复字母,flag = 1表示没有重复字母,flag = 0则表示有重复字母。

自制积木的代码如下:

图片

代码较多,说明如下: 

1). 先将flag设置为1,假设字符串str是不重复的;

2). 如果字符串长度为1,肯定不会重复,直接结束自制积木脚本 ;

3). 使用循环对字符串进行遍历,如果当前字符在列表中,说明重复了,将flag设置为0,然后结束脚本,否则就将其插入到临时列表中。

有了这个自制积木,就可以在插入列表之前进行判断了,在前面的代码中,增加判断如下:

这样一来,就可以将有相同字母的子串过滤掉了。 

4. 计算最长子串长度

这一步比较简单,对每个插入列表的字符串进行比较更新即可,继续增加代码如下:

图片

有两点需要注意:

1). 变量”最大长度“需要初始化为0,通常是在绿旗指令中;

2). 在循环完成之后,使用说话指令说出最大长度。

至此,整个作品就创作好了,你可以输入各种形式的字符串来测试效果啦。

四.总结与思考

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

  • Scratch问答指令;

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

  • 条件编程,包括单分支和多分支; 

  • 变量的使用;

  • 列表的基本操作;

  • 字符串连接运算;

  • 自制积木;

本题难度较大,难点有两个,一是如何使用嵌套循环获取所有的子串,二是如何对字符串进行去重处理。

获取所有的子串,实际上就是数学中的排列组合问题,在小学数学中有一类非常经典的”打枪法“数线段题目,和本题的做法是一样的,其本质是枚举算法,就是把所有的情况都列举出来。

图片

至于去重处理,在编程中十分常见,最基本的方法就是借助列表(或集合)来实现,只要知道其原理,代码倒不难。

关键是如何组织代码,去重是一个独立的功能,此时我们应该想到函数的编程思想,将其定义成自制积木,从而简化代码结构。

你还有什么好的思路和方法吗,也欢迎和超平老师交流。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无需云盘,不限流量实现Zotero跨平台同步:内网穿透+私有WebDAV服务器

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 无需云盘,不限流量实现Zotero跨平台同步:内网穿透私有WebDAV服务器 文章目…

2-10岁女童冬季穿搭怎么选?麻麻们看这里

分享适合女宝的羽绒服穿搭 这种黄色真的超好看 吸睛显白怎么穿都好看 长款连帽设计,精致走线 冬天穿时尚又好看!!

数据结构—LinkedList与链表

目录 一、链表 1. 链表的概念及结构 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环 二.LinkedList的使用 1.LinkedList概念及结构 2. LinkedList的构造 3. LinkedList的方法 三. ArrayList和LinkedList的区别 一、链表 1. 链表的概念及结构 链表是一种 物理…

基于Qt 多线程(继承 QObject 的线程)

​ 继承 QThread 类是创建线程的一种方法,另一种就是继承QObject 类。继承 QObject 类更加灵活。它通过 QObject::moveToThread()方法,将一个 QObeject的类转移到一个线程里执行。恩,不理解的话,我们下面也画个图捋一下。 通过上面的图不难理解,首先我们写一个类继承 QObj…

Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验

360无死角全景照片总能给人带来强烈的视觉震撼,有着大片的既视感。那怎么才能拍出360球形照片呢?它的拍摄原理是通过图片某个点位为中心将图片其他部位螺旋式、旋转式处理,从而达到沉浸式体验的效果。俗话说“工欲善其事,必先利其…

Maven编译报错:javacTask: 源发行版 1.8 需要目标发行版 1.8

报错截图: IDEA中的jdk检查都正常设置的1.8一点毛病没有。参考其他帖子链接如下: https://blog.csdn.net/zhishidi/article/details/131480199https://blog.51cto.com/u_16213460/7197764https://blog.csdn.net/lck_csdn/article/details/125387878 逐…

第四代智能井盖传感器,万宾科技助力城市安全

在迈向更为智能化、相互联系更为紧密的城市发展过程中,智能创新产品无疑扮演了一种重要的角色。智能井盖传感器作为新型科学技术产物,不仅解决传统井盖管理难的问题,也让城市变得更加安全美好,是城市生命线的一层重要保障。这些平…

Mindomo Desktop for Mac(免费思维导图软件)下载

Mindomo Desktop for Mac是一款免费的思维导图软件,适用于Mac电脑用户。它可以帮助你轻松创建、编辑和共享思维导图,让你的思维更加清晰、有条理。 首先,Mindomo Desktop for Mac具有直观易用的界面。它采用了Mac独特的用户界面设计&#xf…

避免defer陷阱:拆解延迟语句,掌握正确使用方法

基本概念 Go语言的延迟语句defer有哪些特点?通常在什么情况下使用? Go语言的延迟语句(defer statement)具有以下特点: 延迟执行:延迟语句会在包含它的函数执行结束前执行,无论函数是正常返回还是…

科研学习|研究方法——Python计量Logit模型

一、离散选择模型 莎士比亚曾经说过:To be, or not to be, that is the question,这就是典型的离散选择模型。如果被解释变量时离散的,而非连续的,称为“离散选择模型”。例如,消费者在购买汽车的时候通常会比较几个不…

Vue 3.0 + vite + axios+PHP跨域问题的解决办法

最后一个Web项目,采用前后端分离。 前端:Vue 3.0 viteelement plus 后端:PHP 运行时前端和后端是两个程序,前端需要时才向后端请求数据。由于是两个程序,这就会出现跨域问题。 比如前端某个地方需要请求的接口如下…

内网穿透的应用-通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

Python自动化测试之request库详解(三)

做过接口测试的都会发现,现在的接口都是HTTPS协议了,今天就写一篇如何通过request发送https请求。 什么是HTTPS HTTPS 的全称是Hyper Text Transfer Protocol over Secure Socket Layer ,是以安全为目标的HTTP通道,简单的讲是HTT…

Power Automate-当收到HTTP请求时触发流程

选择创建自动化云端流,点跳过 第一个操作搜索HTTP,点击当收到HTTP请求时

高质量发展项目——冠心病药物治疗管理标准化培训在京顺利举办

国家卫生健康委《关于加快药学服务高质量发展的意见》明确指出,药师应在慢性病管理中发挥积极作用,可开展用药随访、药物重整等工作。目前,国内尚无针对药师使用的冠心病患者药物治疗管理规范,不同层级医疗机构药师的理论水平和实…

idea中把spring boot项目打成jar包

打jar包 打开项目,右击项目选中Open Module Settings进入project Structure 选中Artifacts,点击中间的加号(Project Settings->Artifacts->JAR->From modules with dependencies ) 弹出Create JAR from Modules&#…

精美可视化:Python自动化生成漂亮的测试报告

“ 运用Python的Unittest、数据驱动测试(DDT)、Excel、Jinja2和HTML技术,构建一个能够自动生成精美可视化测试报告的自动化测试框架” 思路流程 封装读取数据,让所有数据都能够再excel中填写,不再填写任何一行逻辑代码…

Wireshark抓包工具配置以及MQTT抓包分析

1、Wireshark抓包工具使用 打开Wireshark选择,需要抓取的物理网卡,添加过滤设置。 单击“捕获”,选择选项,输入需要捕获的IP地址和端口号。 如: ip host 10.60.4.45 and tcp port 1883 ip host 10.60.4.45 and http p…

【场景】高并发解决方案

文章目录 1. 硬件2. 缓存2.1 HTTP缓存2.1.1 浏览器缓存2.1.2 Nginx缓存2.1.3 CDN缓存 2.2 应用缓存 3 集群4. 拆分4.1 应用拆分(分布式、微服务)4.2 数据库拆分 5. 静态化6. 动静分离7. 消息队列8. 池化8.1 对象池8.2 数据库连接池8.3 线程池 9. 数据库优…

系列九、对象的生命周期和GC

一、堆细分 Java堆从GC的角度还可以细分为:新生代(eden【伊甸园区】、from【幸存者0区】、to【幸存者1区】)和老年代。 二、MinorGC的过程 复制>清空》交换 1、eden、from区中的对象复制到to区,年龄1 首先,当eden区…