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