[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第69讲。
蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。
第14届蓝桥杯青少年组第一次选拔赛于2022年8月21日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
回文数,本题是第14届蓝桥杯Scratch选拔赛真题编程第4题,初级组和中级组都有此题,题目要求编程实现数字计算功能,对于输入正确的正整数,如果是回文数,则输出该数字,否则就输出数字和逆序数的和。
先来看看题目的要求吧。
背景信息:
逆序数:倒序呈现的数字,例如: 123的逆序数为321
回文数:与它的逆序数字相同例如: 1、2、3、4...11、 121......
编程实现:
数字计算。
具体要求:
1). 运行程序,角色、背景如图所示:
2). 等待1秒后,小猫说: "请输入一个正整数”;
3). 如果输入数值不是正整数,小猫说: "输入错误”;
4). 当正整数为回文数字时,小猫说出此正整数1秒;
5). 如果输入数值是正整数且不为回文数时,小猫说出此正整数与它的逆序数字之和;
6). 程序持续重复2)、3)、4)、5)步骤。
本题只有1个角色,就是默认的小猫,如图所示:
这是一道和数学紧密结合的算法题,玩家在输入完内容之后,程序要判断输入内容是否为正整数,如果不是,则直接提示“输入错误”,否则就判断该数字是否为回文数,如果是回文数,则直接输出该数字,否则就计算该数字及其逆序数的和并输出,基本流程如下:
针对上面的需求,我们要解决两个关键点:
判断输入的内容是否为正整数
求逆序数
其中,求逆序数相对简单一点,在第12届蓝桥杯省赛中出现过求逆序数的题目,你可以去参考一下,《求逆序数-第12届蓝桥杯Scratch省赛3真题第3题》。
重点是如何判断输入的内容是正整数,玩家输入的有可能是汉字、字母,就算是数字,也有可能输入的是小数或者负数,我们该如何判断呢?
其实也不难,所谓正整数,就是指在输入的字符中,只能出现0、1、2、3、4、5、6、7、8、9这些数字,只要出现其它字符,就说明不是整数。
因此,我们可以创建一个列表,列表中保存0到9这10个数字,然后利用循环逐个判断输入内容中的字符是否包含在列表中,如果不在列表中,就说明该输入不是正整数,如果所有的字符都包含在列表中,就说明这是一个正整数。
由于判断正整数和求逆序数是两个相对独立的功能,我们可以将它们定义成自制积木,然后在主程序中调用即可。
根据题目描述和思路分析,我们可以分3步来编写程序:
判断正整数
计算逆序数
完成主程序
1. 判断正整数
首先创建一个列表“数字”,并将0、1、2、3、4、5、6、7、8、9这10个数字加入到列表中,如图所示:
接下来创建一个自制积木,将其命名为“判断正整数”,并添加一个参数“数字”,如图:
同时,需要创建两个变量,分别命名为“flag”和“i”,flag用于表示是否为正整数,它有两个取值,为1时表示是正整数,为0时表示不是正整数;i表示计数器,用于循环遍历输入的字符串。
编写自制积木的代码如下:
2. 计算逆序数
计算逆序数相对简单一些,只需要按照从尾到头的顺序来遍历字符串,逐个取出字符再依次拼接即可,创建自制积木“计算逆序数”,并编写代码如下:
需要注意的是,对于字符串连接,需要将变量的初始值设置为空字符串。计算逆序数的过程也是遍历字符串的过程,这体现了编程中的枚举算法思想。
3. 完成主程序
有了上面定义好的两个自制积木,接下来的主程序就比较简单了,只需要使用问答指令获取用户输入,然后调用自制积木即可,代码如下:
代码使用了多层嵌套,第一层是“重复执行”里面嵌套了“如果...那么...否则”,第二层是“如果...那么...否则”又嵌套了一个“如果...那么...否则”。如果没有使用自制积木的话,嵌套的层数会更深,这也充分体现了使用自制积木的好处,即简化代码结构。
本题有一定的难度,积木块数量在57个左右,涉及到的知识点主要包括:
列表的使用,重点是判断某个内容是否在列表中;
Scratch问答指令,包括询问并等待和回答指令;
字符串运算,包括获取字符串长度、获取某个字符和字符串连接;
结合循环遍历字符串 ;
自制积木及其参数的使用;
循环和条件指令的嵌套使用。
本题以数学中的回文数作为编程背景,具有很强的趣味性,在计算逆序数的过程中,又涉及了枚举的算法思想,是一道含金量非常高的编程题。
如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。