背景信息:
递增数:如果一个大于 9 的正整数各个数位上的数,从左到右是逐渐变大的,那么就称这个数为递增数。
例如:124、248 是递增数。
给你一个不含 0 的九位数,请找出从这个九位数中能截取出的所有递增数。
例如:115367482 能够截取出的递增数有:15、36、 67、367、48。
注意:只能截取若干个连续的数。
具体要求:
1). 点击绿旗,列表 1 为空,熊猫说“请输入一个不含 0 的九位数”,同时舞台下方显示示榆入框,如图所示;
例如:输入 115367482
2). 如果输入的整数不能截取出递增数,熊猫说“NO”,1 秒后程序结束;
3). 如果输入的整数能截取出递增数,那么在列表 1 中呈现出截取的所有递增数,如图所示;
核心算法思路
具体思路如下:
遍历起点:我们将九位数的每一位视为一个可能的起点 i。
寻找终点:从起点i向右扩展,只要后面的数比前面的大,我们就继续扩展。否则就结束本轮扩展
记录结果:在每一次成功扩展时,将该位数字进行拼接,拼接的结果都是一个符合要求的递增数。
实现步骤:
第一步:创建需要的变量
i:将九位数的每一位视为一个可能的起点i(从1开始递增)
j:从第i位的后一位起,向右扩展
flag:标注是否扩展成功,默认是1表示成功,0表示扩展失败,当扩展失败时就结束扩展,从下一个起点重新开始
r:存储自增数,没成果扩展一次,就把扩展的数拼接到r后面并加入列表
第二步:创建列表“递增数”
第三步:编写初始化代码
绿旗被点击,情况列表,开始询问,初始化变量i和j的值,先从第一位开始作为起点,所以i=1;向右扩展j=2
第四步:九位数的每一位视为一个可能的起点 i
有几位数那就重复执行几次,每一个起点开始就要重复执行向右扩展(具体代码下一步实现),当扩展失败,我们从下位重新作为起点开始,新的起点就要给变量i加1,j=i+1
第五步:扩展
从起点i向右扩展,只要后面的数(回答的第j位)比前面(回答的j-1位)的大,我们就继续扩展。
否则就结束本轮扩展(将变量flag的值设置为0)
将这段程序放入上一步的需要进行扩展的重复执行中
第六步:判断能否取出递增数
所有数字都遍历结束后,判断“递增数”列表的项目数,如果等于零,表示不能取出递增数,说"No"1秒。
完整的程序代码:
程序源码下载:Scratch图形化编程青少组(国赛_初中级)真题:截取递增数
本站内容未经许可,禁止任何网站及个人进行转载。







