算法是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. 只要右边没有被挡住,我们就往右拐走一步 (想象一只溜出洞口,沿着墙角爬行的小老鼠)
2. 如果前方无路,我们就掉头
3. 否则,就往前走一步
否则,是需要借助前两句的帮助才能表达的。于是我们连接如下
此外,只要路上有宝石,我们都去取下它。
因为有没有宝石,和如何走之间,并没有必然联系,我们可以分两次独立地判断,就是把它们分别放在两个if 中。
我们也观察到,只有在走到路的尽头(isBlocked) 的时候,宝石才会出现,所以我们也可以把对宝石的判断放在 isBlocked 发生的时候才进行。这样可以减少电脑的一次判别,让它跑得稍微快一点, 当然这点差别我们小朋友是感觉不到的,但是当你让电脑一次跑几百万,几千万条指令的时候,尤其很多人同时跑的时候,这个差别就很明显了。所以我们小朋友从一开始学习,也可以稍稍注意一下程序运行效率的事情,不要让电脑做不必要的工作。
所以,我们也可以改写为
或者,既然每次路的尽头都恰好出现一颗宝石,我们就写为:
注意,关于宝石的判断消失了,只要到了路的尽头,我们就往回转,并且收集宝石。
完整代码如下
(由于图片大小超过限制,我们在下一篇求解其他的迷宫)
网友评论