Learn to Code 1 - 算法解析

算法是Learn to Code 1 的最后一章, 在这里小朋友们需要用到learn to code 1. 中学到的所有知识,来巧妙地解决问题,帮助byte 走出迷宫。

在完成算法作业前,我们来复习下learn to code 1 中学到的几个知识点:

1. 指令

我们通过发出一条指令,来让byte 完成一个动作

2. function 

我们可以把多条指令编制成一组,再给这个组起个新名字, 这就得到了一个function 

在function 中,我们特别要注意function 的语法。它的声明和调用

3. 循环

我们学习了for 循环(循环多少次)和while 循环( 循环到什么时候为止)

4. 逻辑控制

我们学习了逻辑变量,就是一个事物状态的标志(true  还是false), 以及逻辑变量的组合运算。(!, &&, ||) 

也学习了如何通过考察逻辑变量的值,选择程序的分支( if ...else if ... else)

然后,duangduangduagn, 我们就可以开始学习算法了!

这个难不倒我们小朋友,它的路线是这样的


由于地图是动态的,我们不能确切地知道byte 从起点到终点需要走几步。幸好,我们可以选择while 循环,让byte 一直走下去,直到路的尽头 — 标志是一个关闭状态的switch

于是我们可以确定程序框架如下:

While  !isOnClosedSwitch {

向前一步()

}

从起点到终点的过程中,我们“向前一步”可以有很多种走法。在这里,我们分析出了3种不同的“步伐”

1.  只要右边没有被挡住,我们就往右拐走一步 (想象一只溜出洞口,沿着墙角爬行的小老鼠)


Learn to Code 1 - 算法解析_第1张图片

2. 如果前方无路,我们就掉头


Learn to Code 1 - 算法解析_第2张图片

3. 否则,就往前走一步

否则,是需要借助前两句的帮助才能表达的。于是我们连接如下

Learn to Code 1 - 算法解析_第3张图片

此外,只要路上有宝石,我们都去取下它。

Learn to Code 1 - 算法解析_第4张图片

因为有没有宝石,和如何走之间,并没有必然联系,我们可以分两次独立地判断,就是把它们分别放在两个if 中。

我们也观察到,只有在走到路的尽头(isBlocked) 的时候,宝石才会出现,所以我们也可以把对宝石的判断放在 isBlocked 发生的时候才进行。这样可以减少电脑的一次判别,让它跑得稍微快一点, 当然这点差别我们小朋友是感觉不到的,但是当你让电脑一次跑几百万,几千万条指令的时候,尤其很多人同时跑的时候,这个差别就很明显了。所以我们小朋友从一开始学习,也可以稍稍注意一下程序运行效率的事情,不要让电脑做不必要的工作。

所以,我们也可以改写为

Learn to Code 1 - 算法解析_第5张图片

或者,既然每次路的尽头都恰好出现一颗宝石,我们就写为:


Learn to Code 1 - 算法解析_第6张图片

注意,关于宝石的判断消失了,只要到了路的尽头,我们就往回转,并且收集宝石。

完整代码如下


(由于图片大小超过限制,我们在下一篇求解其他的迷宫)

你可能感兴趣的:(Learn to Code 1 - 算法解析)