分享

编程大作战--算法挑战2【解说】

 长沙7喜 2017-05-28


《算法挑战》任务解说

本编程任务内容请参见之前发布的

编程大作战--算法挑战(二)

一、挑战题目

观察下面的输出规律

第一行输出: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./product/4383

作品欣赏

中国少儿编程网作品专区:http://www./product/scratch/5


本编程任务内容请参见之前发布的:编程大作战--算法挑战(二)对于这个挑战大家若有其它好的办法欢迎分享作品到我们的网站,也可以留言或者加入我们的qq群进行互动交流。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多