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

news2024/11/24 20:54:50

[导读]:超平老师的《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.coloradmin.cn/o/1217643.html

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

相关文章

2023年【化工自动化控制仪表】找解析及化工自动化控制仪表试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 化工自动化控制仪表找解析参考答案及化工自动化控制仪表考试试题解析是安全生产模拟考试一点通题库老师及化工自动化控制仪表操作证已考过的学员汇总,相对有效帮助化工自动化控制仪表试题及解析学员顺利通…

openGauss学习笔记-125 openGauss 数据库管理-设置账本数据库-校验账本数据一致性

文章目录 openGauss学习笔记-125 openGauss 数据库管理-设置账本数据库-校验账本数据一致性125.1 前提条件125.2 背景信息125.3 操作步骤 openGauss学习笔记-125 openGauss 数据库管理-设置账本数据库-校验账本数据一致性 125.1 前提条件 数据库正常运行,并且对防…

【网络基础实战之路】基于不同协议间使用重发布路由策略

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

威胜WFET2000s电能量数据采集终端-WF102协议报文解读

客户又追加需求了 要求把电表接入他们自己的管理系统 小头菜查找相关资料,发现威胜2000s采集终端功能挺多,但是售价比普通透传DTU贵了 N 倍。 迫于成本压力,小头菜和厂里负责管理系统的领导沟通,看能不能用普通DTU代替。 后来发现…

ACM练习——第四天

ok,今天又是三节课的一天。 刚刚吃完饭的我一刻也不敢耽误,直接开干!!! 这些题和力扣上的,为了练习数据结构的题是不一样的。 直接上嘴脸 题目 第一次放学 (nowcoder.com)来自牛客网 思路 先看他的输入…

JavaScript 语句、标识符、变量

语句 JavaScript程序的单位是行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句 var num 10; 语句以分号结尾,一个分号就表示一个语句结束。 标识符 标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名标识符…

qt定时器的使用

在QWidget中进行声明

V10服务器安装virt-manage

kvm是什么 KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载…

【Linux网络】典型NAS存储方式:NFS网络共享存储服务

一、关于存储的分类 二、NFS的介绍 nfs的相关介绍: 1、原理 2、nfs的特点 3、nfs软件学习 4、共享配置文件的书写格式 关于权限,学习: 5、关于命令的学习: 三、实验操作 1、nfs默认共享权限(服务端设置&#…

短视频账号矩阵系统源码/技术源码分享/技术搭建架构

短视频账号矩阵系统----技术源码分享/技术搭建架构 抖音seo又叫抖音搜索引擎,只要能做到布词,和过去的百度seo优化一样,布词,布关键词,当搜索栏搜索时可以搜索到该短视频。优化视频关键词,做好关键词的优化…

VSCode任务tasks.json中的问题匹配器problemMatcher和ProblemPattern的severity属性关系

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 在 VS Code 中,tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题(错误、警告等)。 ProblemMatcher的JSON对象和其下的子对象pattern…

Android 13.0 recovery出厂时清理中字体大小的修改

1.前言 在13.0的系统rom定制化开发中,在recovery模块也是系统中比较重要的模块,比如恢复出厂设置,recovery ota升级, 清理缓存等等,在一些1080p的设备,但是density只是240这样的设备,会在恢复出厂设置的时候,显示的字体有点小, 产品要求需要将正在清理的字体调大点,这…

【解刊】现投录用快!无版面费!CCF-B,2个月录用,2天见刊!

计算机类 • 好刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读,如有相关领域作者有意向投稿,可作为重点关注!后文有真实发表案例,供您投稿参考~ 01 期刊简介 Computers & Security ☑️出版社:Elsevier …

JUNIT使用和注意、以及断言的介绍使用、SpringBoot Test测试类的使用、maven配置使用junit详细介绍

参考文章: https://www.cnblogs.com/zhukaile/p/14514238.html,https://blog.csdn.net/qq_36448800/article/details/126438339 一、什么是单元测试 在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保…

mysql---squid代理服务器

squid代理服务器 nginx也可以代理:反向代理--------负载均衡 squid:正向代理服务器。例:vpn squid :正向代理,缓存加速,acl过滤控制 代理的工作机制 1、代替客户端向网站请求数据,不需要访问代理的IP地址…

哈夫曼编码详细证明步骤

关于哈夫曼编码,想必大家都很清楚,这里来讲解一下他的详细证明方法。代码的话就不给了网上一大堆,我再给也没什么意思,这里主要讲明白正确性的证明。我将采取两种方法进行证明,一种常规的方法,还有一种采取…

5.以docker容器生成镜像推送到私有镜像仓库

1.创建私有仓库 1.1 拉取私有仓库镜像registry docker pull registry1.2 运行私有仓库镜像registry docker run -d -p 5001:5000 -v /data/myregistry/:/tmp/registry --privilegedtrue registry1.3 校验私有仓库registry是否安装成功 curl -XGET http://localhost:5001/v2…

Ubuntu环境下以编译源码的方式安装Vim

目录 1. Ubuntu环境 2. 下载编译vim 2.1 效果截图 3. 配置环境变量 1. Ubuntu环境 Linux chris-166 6.2.0-36-generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 9 15:34:04 UTC 2 x86_64 x86_64 x86_64 GNU/Linux 2. 下载编译vim // 源码下载 chris_166chris-16…

Unity VR 开发教程 OpenXR+XR Interaction Toolkit (一) 安装和配置

文章目录 📕前言❓什么是 OpenXR❓什么是 XR Interaction Toolkit 📕教程说明📕第一步:导入 OpenXR📕第二步:导入 XR Interaction Toolkit⭐导入 Starter Assets⭐添加 Preset⭐设置 Preset Manager 的 Fil…

云ES高级监控告警

一、高级监控告警配置 1.1 操作入口 1.2 配置告警模块 1.2.1 新建联系人 添加联系人后,需要进行激活 1.2.2 新建联系人组 1.2.3 创建报警组 1.2.4 新建报警规则