字母不重复的子串-第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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

矩阵起源到此一游:千岛湖(内含海量招聘岗位)

秋意渐浓,正值金秋时节,MO 也出去玩啦! 海量招聘岗位,点击链接一键查看,就等您来: 「矩阵起源招聘」2023年矩阵起源招聘信息-BOSS直聘​www.zhipin.com/gongsi/job/59a68fecfe392c0d1nd93N-4EVU~.html​编…

放松鸭-技术支持

“放松鸭”利用苹果手表的HRV心率变异性和静息心率等数据进行分析,帮助您了解当前身体疲劳和心理压力程度,并及时提醒您的压力状态。我们的目标是让您更好地感知、管理和应对压力,让您的身心得到平静和放松。通过读取您的心脏数据&#xff0c…

MySQL数据库入门到大牛_基础_08__聚合函数(常用的5种聚合函数;GROUP BY分组;HAVING使用及与WHERE的对比;SELECT的执行过程)

我们上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类内置函数,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。即使输出多个值,也得作…

嵌套的iframe页面中rem字号变小问题处理

问题原因 如果 html 的 font-size: 100px,那字号为0.16rem的字实际为100px * 0.16 16px 故最外层的html的字号 与iframe下的html字号 不相同时,则会导致iframe页面内的字体字号存在问题 解决办法 先获取外层html的font-size const fontSize par…

订水商城实战教程10-宫格导航

上一篇我们介绍了跑马灯的功能,这一篇就进入到我们的主体部分开发。在订水商城业务中可以按照分类查询商品信息,这就涉及到数据源的拆分。 我们在数据源的设计中区分为主子表,主表呢存储唯一的记录,子表的记录可以重复&#xff0…

营收净利双降、市值蒸发50亿,莱克电气苦战双11

文 | 不二研究 若楠 熊生 新增长难寻,新故事难讲。莱克电气股份有限公司(下称“莱克电气”,603355.SH)承压的困局,都写在最新的三季报里。 今年双11前夕,全国吸尘器ODM龙头莱克电气公布了2023年三季报,其前三季度营收…

软件测试,如何月薪过万?

月薪过万这个话题,在现在这个百花齐放的职场里是个很流行的命题。 月薪过万对于行业大佬来说,可能是个不屑一顾的追求,但对于职场新人而言通常是个很实际的人生目标。 我怎么样能达到月薪过万呢,其实严格来说,要找到…

酸性设计——它的独特性和特点都在这里了

酸性设计,一个出乎意料且奇特的概念,实则蕴藏着丰富的创意设计思维和科学内涵。这一术语首次被引入设计领域,是为了探索化学元素在设计中的独特魅力和无限可能。现在,让我们一起进入酸性设计的世界,揭示其独特之处,理解…

mfc140u.dll丢失的解决方法,以及mfc140u.dll解决方法的优缺点

在使用电脑过程中,有时会遇到一些与动态链接库文件(DLL)相关的错误。其中,mfc140u.dll丢失的错误是较为常见的一种。当这个关键的mfc140u.dll文件丢失或损坏时,可能会导致某些应用程序无法正常运行。在本文中&#xff…

【2016年数据结构真题】

已知由n&#xff08;M>2&#xff09;个正整数构成的集合A{a<k<n},将其划分为两个不相交的子集A1 和A2&#xff0c;元素个数分别是n1和n2&#xff0c;A1和A2中的元素之和分别为S1和S2。设计一个尽可能高效的划分算法&#xff0c;满足|n1-n2|最小且|s1-s2|最大。要求…

tsconfig.json无法写入文件“XXXX“因为它会覆盖输入文件

在开发ts项目的时候&#xff0c;包错提示无法写入文件&#xff1a; tsconfig.json无法写入文件"XXXX"因为它会覆盖输入文件 这是tsconfig.json文件配置问题&#xff0c;需要加入下面的配置就好了&#xff1a; {"compilerOptions": {"outDir": …

6.1 集合概述

1. 集合概述 1.1. 引入 在前面的章节中我们学习了数组&#xff0c;数组可以存储多个对象&#xff0c;但是数组只能存储相同类型的对象&#xff0c;如果要存储一批不同类型的对象&#xff0c;数组便无法满足需求了。为此&#xff0c;Java提供了集合&#xff0c;集合可以存储不…

quartz笔记

Quartz-CSDN博客 上面是Quartz的一些基本知识,如果对quartz的基本API不是很了解的话,建议先看下上面的 和Linux Crontab对比 1.执行粒度: Linux Crontab是进程级 quart是线程级 2.跨平台性: Crontab只能在Linxu运行 quart是java实现,可以跨平台 3.调度集上 Crontab的…

3C品牌国际市场攻略:海外网红营销如何推动电子经济

随着全球信息技术的快速发展&#xff0c;3C电子产品市场变得愈发竞争激烈&#xff0c;各品牌需要不断寻求新的市场推广方法来吸引更多消费者。其中&#xff0c;海外网红营销成为了一个备受关注的趋势&#xff0c;融合了互联网、社交媒体和消费品牌的力量&#xff0c;为3C品牌在…

什么是CMDB?为什么企业需要CMDB?

CMDB即Configuration Management Database&#xff0c;配置管理数据库&#xff0c;它是组织IT基础结构中配置项CI(Configuration Item)及其关系的数据库。 而CI是指任何需要进行管理以确保成功提供服务的条目&#xff0c;CI可以是一个具体的实体&#xff0c;如服务器、交换机&…

go语言学习-git代码管理

1、功能 1、版本控制&#xff1a;可以追踪代码的变更记录&#xff0c;并且可以看到修改的内容&#xff0c;以及版本的回溯 2、分支管理&#xff1a;可以让我们同时处理多个任务&#xff0c;并且不会影响稳定的分支&#xff08;主分支&#xff09; 3、团队协作&#xff1a;可以…

ESP32 Arduino实战基础篇-使用中断和定时器

本教程介绍如何使用 PIR 运动传感器通过 ESP32 检测运动。在此示例中,当检测到运动(触发中断)时,ESP32 会启动计时器并打开 LED 并持续预定义的秒数。当计时器倒计时结束时,LED 自动关闭。 通过这个例子,我们还将探讨两个重要的概念:中断和定时器。 中断介绍 要使用 P…

Layout工程师们--Allegro X AI实现pcb自动布局布线

Cadence 推出 Allegro X AI&#xff0c;旨在加速 PCB 设计流程&#xff0c;可将周转时间缩短 10 倍以上 楷登电子&#xff08;美国 Cadence 公司&#xff0c;NASDAQ&#xff1a;CDNS&#xff09;今日宣布推出 Cadence Allegro X AI technology&#xff0c;这是 Cadence 新一代…

使用FFmpeg合并多个ts视频文件转为mp4格式

前言 爬取完视频发现都是ts文件&#xff0c;而且都是几百KB的视频片段&#xff0c;.ts 全名叫&#xff1a;MPEG Transport Stream&#xff0c;它是一个万能的多媒体容器&#xff0c;可以装下音频、视频、字幕。有时我们需要将.ts文件转换为其他更加广泛被支持的格式&#xff0…

【Linux系统编程十八】:(基础IO5)--动静态库共享/动静态加载问题(涉及地址空间)

【Linux系统编程十八】&#xff1a;动静态库共享/动静态加载问题(涉及地址空间&#xff09; 一.可执行程序如何被加载的1.加载之前2.加载之后①如何执行第一条命令②缺页中断/与地址空间建立联系 二.动态库如何加载的三.动态库如何实现多进程间共享的 一.可执行程序如何被加载的…