W4 作業檢討

盧冠綸 @ sprout 2021 C/C++ 語法班

987 大十字

大致的流程...

  • 先把資料都cin進來
  • 找出被點到的人是第幾行第幾列
  • 把所有該站的人的座號做比較,再印出答案

先把資料都cin進來

找出被點到的人是第幾行第幾列

把所有該站的做比較再印出答案

注意max這個變數一定要初始化ㄛ

6003 小普的人情節

大致的流程

  • cin資料
  • 用顛倒的順序,把原始的資料轉換並印出

先來分析一下各種可能:

原始的字元 '0'~'9' 小寫字母 大寫字母
要印出的東西 +3 ('7' '8' '9' 變成 "10" "11" "12") 變大寫 變小寫('Z'變' ')

不過,我要怎麼處理'7' '8' '9' 這三個數字呢?

先來分析一下各種可能:

原始的字元c '0'~'6' '7' '8' '9'
要印出的東西 c+3  "10" "11" "12"
原始的字元c 'a'~'z' 'A'~'Y' 'Z'
要印出的東西 變大寫 (c-32) 變小寫(c+32) ' '

大家有沒有嗅到一連串if的味道呢?

347 魔王戰前夜II - 迷宮探索

大致的流程

  • cin資料
  • 找到起點位置,決定第一步要往什麼方向
  • 從起點開始,做以下的while迴圈
  • cout你的答案

while(還沒走到終點){

        決定下一步要左轉、右轉、還是直走;

        走出下一步;

        如果走到的格子是'.',就改成'*'

}

cin資料

找到起點位置,

決定第一步要往哪個方向

while迴圈

while(還沒走到終點){

        決定下一步要左轉、右轉、還是直走;

        走出下一步;

        如果走到的格子是'.',就改成'*'

}

為什麼要使用olddown和oldright這兩個變數?不用會怎樣?

那個 *1 、*(-1)是什麼意思?

那個x-right 、 y+down 那些是什麼意思?

為什麼要先 if ( ... != 'X') 之後才往前進?

while(還沒走到終點){

        決定下一步要左轉、右轉、還是直走;

        走出下一步;

        如果走到的格子是'.',就改成'*'

}

1.為什麼要使用olddown和oldright這兩個變數?不用會怎樣?

因為我在左/右轉的過程中,會先把down的值改掉,再去改right的值。改right的值的時候,會用到改之前的down的值,因此需要用olddown存改之前的down的值才不會出bug。

(啥?那oldright呢?哦其實那只是我自己覺得好看才用的,事實上就算不用也沒關係)

 

2.那個 *1 、*(-1)是什麼意思?

大家可以看看,方向往上、下、左、右時,down跟right分別應該是多少,就會發現在往左/右轉時可以直接像我這樣寫。(事實上,這有點像是旋轉矩陣的概念)

(這個不懂也沒關係,事實上用對四種方向都分別用if來處理也能達到一樣的效果)

3.那個x-right 、 y+down 那些是什麼意思?

maze[x-right][y+down]:你左邊的格子

maze[x+down][y+right]:你前面的格子

 

4.為什麼要先 if ( maze[x+down][y+right] != 'X') 之後才往前進?

因為你前面的格子有可能是牆壁。遇到牆壁就不能前進,要再轉到其他有路的方向後才能往前走。

while(還沒走到終點){

        決定下一步要左轉、右轉、還是直走;

        走出下一步;

        如果走到的格子是'.',就改成'*'

}

(while迴圈跑完之後,再把你的答案都印出來就完成了。)

第四次作業

By allen522019

第四次作業

  • 254