一、任务背景
挑战题目:观察下面的输出规律
第一行输出:0
第二行输出:12
第三行输出:345
第四行输出:6789
第五行输出:01234
第六行输出:567890
.
.
.
请用scratch显示第N(N≤50)行输出结果。
二、任务分析
很多同学看到上次的挑战题目表示没看懂,下面我们一起来观察一下发现有以下几个规律:
1、数字的个数与行数相同,也就是说第一行1个数字,第二行2个数字,那么到了第十行就是十个数字;
2、数字的显示是有顺序的,0、1、2、3、4...8、9、0、1...不断循环输出
3、每一行的数字是连续的
三、任务指导
本次挑战的核心难度就在于如何得知第N行的第一个数字。
思路A,就是按照题目规律通过嵌套循环来一个个得到输出的数字知道第N行停止,这个方式效率比较低
示例:通过嵌套循环,外层是行数累加,内层循环是数字显示,变量:n行数;i内层循环次数控制变量,第i行就有i个数字输出;k为N行第一个数字
思路B,通过上面的分析发现规律数字是不断从0-9(10个数)循环的,因此我们第一步就是要算出第N行之前总共输出了多少个数字,第二步用这个总数➗10得到的余数就是第N行的第一个数(例如第6行前5行总共输出了15个数字➗10=1,余数是5,就表示0-9重复了1次,在重复第2次时到了第5个数就是4那么4就是第5行最后一个数,下一行第一个数自然就是5)。我们找到了思路接下来就是用程序来实现了:
示例1:通过循环累加计算N-1行的数字个数总和,变量:n行数;i每一行的数字个数;sum数字总和
示例2:通过循环累加(倒着加)计算N-1行的数字个数总和,变量:n行数;sum数字总和
示例3:根据等差数列求和公式进行计算,此方法效率最高,但算法超出小学范围,在此不做说明。
问题二:如何显示出所有的数字?
知道了第一个数字,那么第N行有N个数,那就就把这些数拼接显示即可。
方法一:可以通过链表存储0-9十个数,从对应的第一个数开始通过循环N次不断获取,如果遇到链表末尾,再从链表第一个数开始取,将这些取到的数字拼接起来即可,我们的其它作品有使用不再细说。
方法二:思考一下如果不用链表有其它办法没有,知道了第一个数,那么这个数加1就是下一个数,进行拼接,这样通过重复执行,不断给这个数加1,如果加1后这个数等于10我们就把这个数设置为0这么继续,把每次加1得到得数拼接是否就得到了结果呢?如下图所示:
以上所有示例代码段可通过电脑在我们的作品专区找到:http://www.kidscode.cn/product/4383
对于这个挑战大家还有什么其他好的办法欢迎分享作品到我们的网站,也可以留言或者加入我们的qq群进行互动交流。
本站内容未经许可,禁止任何网站及个人进行转载。