昨天決定開始 30 天 ITSA 挑戰之後,今天終於要正式開始刷題了。
但我發現一個很現實的問題:
我連題目都還沒看懂,要怎麼寫?
以前看到 ITSA 題目,我很容易直接跳去看範例輸入、範例輸出,然後開始想:
「這到底要怎麼寫???」
結果常常還沒開始寫,就已經先放棄了。
所以今天決定先不急著寫程式。
第一步:學會看題目。
一、程式題其實都可以拆成三件事情
看到一個 ITSA 題目,我現在會先問自己三個問題:
① 題目給我什麼?
也就是 Input(輸入)。
例如:
輸入一個整數 N
代表程式會拿到一個數字。
② 題目要我做什麼?
這就是題目的核心要求。
例如:
請判斷 N 是奇數還是偶數。
那我就知道:
輸入:一個數字
處理:判斷奇偶
③ 最後要輸出什麼?
也就是 Output(輸出)。
例如題目說:
如果 N 是奇數,輸出 Odd;如果 N 是偶數,輸出 Even。
那麼整題就可以整理成:
Input
↓
一個整數 N
↓
判斷 N 是奇數還是偶數
↓
Output
↓
Odd 或 Even
突然就沒有那麼可怕了。
二、先不要急著想「程式碼」
這是我今天覺得自己最需要改掉的習慣。
以前看到題目:
「給你 N,請計算……」
我就會直接開始想:
int n;
cin >> n;
然後寫到一半就卡住。
但其實更好的方法應該是:
Step 1:先用自己的話講一次題目
例如:
「喔~就是給我一個數字,然後我要判斷它是不是偶數。」
Step 2:找出 Input
N
Step 3:找出 Output
Odd / Even
Step 4:想「怎麼解」
例如:
N ÷ 2 的餘數
如果餘數是 0,就是偶數。
如果不是 0,就是奇數。
最後才開始寫程式。
三、範例:把一題簡單的題目拆開
假設今天看到這題:
輸入一個整數 N,請判斷 N 是奇數還是偶數。如果是奇數輸出 Odd,如果是偶數輸出 Even。
看到這種題目,先不要寫程式。
我會先整理成:
📥 Input
一個整數 N
🔧 Process
判斷:
N % 2
如果:
N % 2 == 0
代表是偶數。
否則就是奇數。
📤 Output
Odd
或
Even
這時候才開始寫程式:
#include
using namespace std;
int main() {
int N;
cin >> N;
if (N % 2 == 0) {
cout << "Even";
} else {
cout << "Odd";
}
return 0;
}
四、原來 ITSA 題目沒有想像中那麼可怕?
我以前常常覺得:
「這題好難。」
但今天開始發現,有時候不是題目真的很難,而是我看到一大段文字之後,不知道該把資訊分成哪些部分。
所以之後看到 ITSA 題目,我想先強迫自己做這件事:
┌──────────────┐
│ 題目在說什麼? │
└──────┬───────┘
↓
📥 Input
↓
🔧 Process
↓
📤 Output
先把題目翻譯成:
「給我什麼 → 我要做什麼 → 我要印什麼」
再開始寫程式。
五、今天的新習慣:題目三問
從今天開始,每遇到一題 ITSA,我都會先問:
❶ 給我什麼?
Input 是什麼?
❷ 要我做什麼?
我要對資料進行什麼處理?
❸ 要我印什麼?
Output 的格式是什麼?
只要這三個問題還答不出來,就先不要寫程式。
今日小結
今天沒有刷很多題,甚至沒有碰什麼很難的語法。
但我覺得這可能是開始刷題之前,很重要的一步。
因為寫程式不只是把語法背起來。
更重要的是:
看懂問題 → 拆解問題 → 想出方法 → 寫成程式。
以前的我比較像是:
題目 → 直接開始亂寫 → 錯誤 → 💀
希望之後可以慢慢變成:
題目 → 分析 → 拆解 → 解法 → 寫程式 → Debug → AC 🎉