背景信息:

递增数:如果一个大于 9 的正整数各个数位上的数,从左到右是逐渐变大的,那么就称这个数为递增数。

例如:124、248 是递增数。

给你一个不含 0 的九位数,请找出从这个九位数中能截取出的所有递增数。

例如:115367482 能够截取出的递增数有:15、36、 67、367、48。

注意:只能截取若干个连续的数。

具体要求:

1). 点击绿旗,列表 1 为空,熊猫说“请输入一个不含 0 的九位数”,同时舞台下方显示示榆入框,如图所示;

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

例如:输入 115367482

2). 如果输入的整数不能截取出递增数,熊猫说“NO”,1 秒后程序结束;

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

3). 如果输入的整数能截取出递增数,那么在列表 1 中呈现出截取的所有递增数,如图所示;

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

 核心算法思路

具体思路如下:

遍历起点:我们将九位数的每一位视为一个可能的起点 i。

寻找终点:从起点i向右扩展,只要后面的数比前面的大,我们就继续扩展。否则就结束本轮扩展

记录结果:在每一次成功扩展时,将该位数字进行拼接,拼接的结果都是一个符合要求的递增数。

实现步骤:

第一步:创建需要的变量


i:将九位数的每一位视为一个可能的起点i(从1开始递增)

j:从第i位的后一位起,向右扩展

flag:标注是否扩展成功,默认是1表示成功,0表示扩展失败,当扩展失败时就结束扩展,从下一个起点重新开始

r:存储自增数,没成果扩展一次,就把扩展的数拼接到r后面并加入列表

第二步:创建列表“递增数”

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

第三步:编写初始化代码

绿旗被点击,情况列表,开始询问,初始化变量i和j的值,先从第一位开始作为起点,所以i=1;向右扩展j=2

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

第四步:九位数的每一位视为一个可能的起点 i

有几位数那就重复执行几次,每一个起点开始就要重复执行向右扩展(具体代码下一步实现),当扩展失败,我们从下位重新作为起点开始,新的起点就要给变量i加1,j=i+1

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

第五步:扩展

从起点i向右扩展,只要后面的数(回答的第j位)比前面(回答的j-1位)的大,我们就继续扩展。

否则就结束本轮扩展(将变量flag的值设置为0)

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

将这段程序放入上一步的需要进行扩展的重复执行中

第六步:判断能否取出递增数

所有数字都遍历结束后,判断“递增数”列表的项目数,如果等于零,表示不能取出递增数,说"No"1秒。

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

完整的程序代码:

Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

程序源码下载:Scratch图形化编程青少组(国赛_初中级)真题:截取递增数

本站内容未经许可,禁止任何网站及个人进行转载。