算法是Learn to Code 1 的最后一章鹃觉, 在這里小朋友們需要用到learn to code 1. 中學(xué)到的所有知識专酗,來巧妙地解決問題,幫助byte 走出迷宮盗扇。
在完成算法作業(yè)前祷肯,我們來復(fù)習(xí)下learn to code 1 中學(xué)到的幾個知識點:
1. 指令
我們通過發(fā)出一條指令,來讓byte 完成一個動作
2. function?
我們可以把多條指令編制成一組疗隶,再給這個組起個新名字佑笋, 這就得到了一個function?
在function 中,我們特別要注意function 的語法斑鼻。它的聲明和調(diào)用
3. 循環(huán)
我們學(xué)習(xí)了for 循環(huán)(循環(huán)多少次)和while 循環(huán)( 循環(huán)到什么時候為止)
4. 邏輯控制
我們學(xué)習(xí)了邏輯變量蒋纬,就是一個事物狀態(tài)的標志(true ?還是false), 以及邏輯變量的組合運算。(坚弱!蜀备, &&, ||)?
也學(xué)習(xí)了如何通過考察邏輯變量的值荒叶,選擇程序的分支( if ...else if ... else)
然后碾阁,duangduangduagn, 我們就可以開始學(xué)習(xí)算法了!
這個難不倒我們小朋友些楣,它的路線是這樣的
由于地圖是動態(tài)的脂凶,我們不能確切地知道byte 從起點到終點需要走幾步宪睹。幸好,我們可以選擇while 循環(huán)蚕钦,讓byte 一直走下去容客,直到路的盡頭 — 標志是一個關(guān)閉狀態(tài)的switch
于是我們可以確定程序框架如下:
While ?!isOnClosedSwitch {
向前一步()
}
從起點到終點的過程中肠虽,我們“向前一步”可以有很多種走法结榄。在這里咧织,我們分析出了3種不同的“步伐”
1. ?只要右邊沒有被擋住,我們就往右拐走一步 (想象一只溜出洞口食听,沿著墻角爬行的小老鼠)
2. 如果前方無路,我們就掉頭
3. 否則污茵,就往前走一步
否則樱报,是需要借助前兩句的幫助才能表達的。于是我們連接如下
此外泞当,只要路上有寶石迹蛤,我們都去取下它。
因為有沒有寶石襟士,和如何走之間盗飒,并沒有必然聯(lián)系,我們可以分兩次獨立地判斷陋桂,就是把它們分別放在兩個if 中逆趣。
我們也觀察到,只有在走到路的盡頭(isBlocked) 的時候嗜历,寶石才會出現(xiàn)宣渗,所以我們也可以把對寶石的判斷放在 isBlocked 發(fā)生的時候才進行。這樣可以減少電腦的一次判別梨州,讓它跑得稍微快一點痕囱, 當(dāng)然這點差別我們小朋友是感覺不到的,但是當(dāng)你讓電腦一次跑幾百萬暴匠,幾千萬條指令的時候鞍恢,尤其很多人同時跑的時候,這個差別就很明顯了每窖。所以我們小朋友從一開始學(xué)習(xí)帮掉,也可以稍稍注意一下程序運行效率的事情,不要讓電腦做不必要的工作岛请。
所以旭寿,我們也可以改寫為
或者,既然每次路的盡頭都恰好出現(xiàn)一顆寶石崇败,我們就寫為:
注意盅称,關(guān)于寶石的判斷消失了肩祥,只要到了路的盡頭,我們就往回轉(zhuǎn)缩膝,并且收集寶石混狠。
完整代碼如下
(由于圖片大小超過限制,我們在下一篇求解其他的迷宮)