字母不重复的子串-第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.mzph.cn/news/144492.shtml

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

相关文章

解决:Android TextView 设置斜体后右侧文字被遮挡

一、问题说明 遇到一个比较奇怪的情况&#xff0c;给 TextView 文字设置倾斜后&#xff0c;右侧的文字会被遮挡&#xff0c;感觉这应该是 Android 的一个 bug &#xff01; 上代码&#xff1a; <TextViewandroid:id"id/tv_title"android:layout_width"wra…

windows与wsl互传文件

1.把windows上的文件传到wsl中&#xff0c;\\wsl.localhost\Ubuntu-22.04\mnt\wsl 将你要传的文件放到wsl这个路径下&#xff0c;Ubuntu-22.04是我的子系统&#xff0c;换成自己对应的 2.把wsl中的文件传到windows中 将wsl中的文件放到 /mnt/c 或 /mnt/d 中&#xff0c;这两…

小红书直播开启新纪元,拓世法宝AI直播一体机助您轻松成为行业标杆!

2023年&#xff0c;小红书终于成功坐上了电商牌桌。 今年3月的“董洁效应”带动了一批品牌商家、博主入驻小红书试水&#xff0c;其直播业务积蓄了巨大势能。10月15日&#xff0c;“初代名媛”章小蕙完成了在小红书的第二场直播&#xff0c;以销售额破亿的成绩打响了小红书双1…

大厂必备的6款React UI框架

优秀的ReactUI框架可以为您节省开发时间&#xff0c;提高开发效率&#xff0c;统一设计语言。你还在为你的项目寻找高质量的ReactUI框架吗&#xff1f;为了让您更容易找到易于使用的UI框架&#xff0c;分享6个优秀的ReactUI框架选项&#xff0c;并介绍了每个UI框架的不同功能和…

Google 向中国开发者开放数百份 TensorFlow 资源

Google 的机器学习框架 TensorFlow 自 2015 年开源后&#xff0c;已然成为 AI 领域最受欢迎的框架。 据统计&#xff0c;在广受欢迎的 Python 编程语言在线软件知识库 PyPi 上&#xff0c;TensorFlow 的下载次数已超过 90 万&#xff0c;其中有 15% 来自中国。谷歌官方博客也表…

Android问题笔记四十四:关于RecyclerView出现Inconsistency detected崩溃

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

AppLink上的小鹅通能实现什么操作呢?

AppLink实现小鹅通信息同步操作 本篇文章给大家演示下小鹅通可在AppLink平台上快速实现的同步操作&#xff0c;1.用户注册或更换手机号信息同步 2.小鹅通产生新的购买订单&#xff0c;订单信息同步。 以下操作均需获得小鹅通授权 授权后登录AppLink操作台&#xff0c;在【我的…

ajax异步传值以及后端接收参数的几种方式

异步传值 第一种呢&#xff0c;也是最简单的一种&#xff0c;通过get提交方式&#xff0c;将参数在链接中以问号的形式进行传递 // 前台传值方法 // 触发该方法调用ajaxfunction testAjax(yourData) {$.ajax({type: "get", // 以get方式发起请求url: "/yo…

HackTheBox-Starting Point--Tier 2---Included

文章目录 一 Included 测试过程1.1 打点1.2 横向移动1.3 权限提升 二 题目 一 Included 测试过程 1.1 打点 1.端口扫描 nmap -sV -sC 10.129.193.212.访问web站点 3.文件包含漏洞探测 观察请求地址&#xff1a;http://10.129.193.21/?filehome.php&#xff0c;利用file参数动…

【Spring】 Spring中的IoC(控制反转)

以往在定义业务层实现时&#xff0c;在指定具体地Dao时候需要具体地定义出其实现&#xff1a; public class BookServiceImpl implements BookService{private BookDao bookDao new BookDaoImpl();public void save(){bookDao.save()} }public class BookDaoImpl implements …

只有开源才能拯救AI

导语 | 随着 AI 技术的蓬勃发展&#xff0c;大模型的开源化正成为人工智能领域的新潮流&#xff0c;但同时引发的伦理和安全风险也饱受大家关注&#xff0c;如何把握平衡其中的尺度成为开源的一大难题。我们又应该如何有效进行开源治理&#xff1f;未来将走向何方&#xff1f;今…

二叉树题目:统计二叉树中好结点的数目

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;统计二叉树中好结点的数目 出处&#xff1a;1448. 统计二叉树中好结点的数目 难度 5 级 题目描述 要求 给定一…

IEEE Standard for SystemVerilog—Chapter14. Clocking blocks

14.1 General This clause describes the following: — Clocking block declarations(时钟块声明) — Input and output skews(输入和输出偏斜) — Clocking block signal events(时钟块信号事件) — Cycle delays(周期延迟) — Synchronous events(同步事件) — Synchronous…

Ubuntu22.04离线安装uwsgi问题记录

GCC4.8安装 1、报错信息1&#xff1a; 由于缺少gcc4.8环境导致的无法安装uwsgi 解决方案&#xff1a; 离线安装GCC4.8环境, GCC4.8.5离线安装步骤如下&#xff1a; 1、下载gcc的离线安装包及其依赖包&#xff0c;链接如下&#xff1a; https://download.csdn.net/download/…

idea运行项目之后一直卡在Writing classes… 解决方案

最近遇到idea里直接运行一个Spring boot项目后&#xff0c;idea一直慢悠悠的parsing java&#xff0c;然后就writing classes&#xff0c;然后就一直卡着不动了&#xff0c;运气好10几分钟能把项目启动起来。 多年的摸鱼经验告诉我&#xff0c;事出反常必有妖&#xff0c;赶紧…

35、Flink 的 Formats 之CSV 和 JSON Format

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

使用.net 构建 Elsa Workflow

对接过蓝凌OA 也基于泛微OA数据库原型重新研发上线过产品&#xff0c;自研的开源的也上线过 每个公司对OA流程引擎介绍 都不一样的&#xff0c; 比如Elsa 这款微软MVP开源组件&#xff0c;基于跨平台开发的技术含量高&#xff0c;专门做OA的同行推过对应文章。 直接看怎么用吧。…

新版本!飞凌嵌入式RK3568系列开发板全面支持Debian 11系统

飞凌嵌入式OK3568-C/OK3568J-C开发板现已全面支持Debian 11系统&#xff0c;新系统的加持能为用户提供主控新选择&#xff0c;并为开发者带来更多开发便利&#xff01; Debian系统作为一种广受欢迎和信赖的开源操作系统&#xff0c;以其稳定性、可靠性和开放性而闻名&#xff0…

MySQL(16):变量、流程控制与游标

变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为 系统变量 以及 用户自定义变量 。 系统变量 变量由系统定义&#xff0c;不是用户定义&#xff…

centos搭建docker镜像Harbor仓库的简明方法

在kubernetes集群中如果要部署springcloud这样的应用&#xff0c;就必须有一个自建的docker镜像中心仓库。 它的目的有两点&#xff1a; 1. 镜像拉取速度快 2. 开发好维护 而Harbor是一个非常好用的docker本地仓库 所以本篇文章来讲讲如何在部署Harbor仓库 首先系统版本最…