7.8 OJ 上的函式實作題
本單元的作業裡有一種新題型:函式實作題。題目不再要求你交一支完整的程式,而是給你一個函式簽名(函式的名稱、參數、回傳型態),要你只寫出這個函式的內容。例如:
int my_max(int x, int y);
你提交的程式碼裡就只放 my_max 的完整定義。評測時,評分程式會自己準備資料、呼叫你的函式、檢查回傳值——輸入輸出都是它的事,不是你的事。
¶作答規則
- 只交函式,不要寫
main。評分程式自帶main,你再寫一個會跟它撞在一起,直接編譯錯誤。 - 不要自己
cin/cout。資料由評分程式透過「參數」交給你,答案由你透過「回傳值」(或修改傳入的參數、陣列)交回去。多印任何東西都會 WA。 - 函式簽名照抄題目。名稱、參數型態、有沒有
&,一個都不能改——這些就是你和評分程式之間的約定。 - 注意「禁止呼叫」的規定。這類題目通常是要你練習「自己實作」,所以會檢查原始碼:例如實作
my_max的題目禁止呼叫內建的max。題目敘述會明講禁了什麼。
¶資料怎麼進、答案怎麼出
看懂函式簽名,就知道這題的「輸入輸出」長什麼樣:
int my_max(int x, int y); // 資料從參數進來,答案用 return 交回去
void my_swap(int& a, int& b); // 參數帶 &(7.5 的 pass by reference):
// 沒有回傳值,答案就是「把 a、b 改好」
void my_rotate(int arr[], int n, int k); // 參數是陣列(7.7):
// 直接修改陣列內容就是你的答案
void 加上 & 或陣列參數的組合,正是前幾節鋪的路:評分程式看的不是你印了什麼,而是它手上的變數/陣列被你改成了什麼。
¶想在自己電腦上測試?用題目附的模板
實作題的題目敘述最後都附有一份本機測試模板:一支已經寫好 main、會讀範例輸入格式的完整程式,裡面留了一個註解位置。把你實作的函式貼進去,就能在自己的電腦上編譯執行、用範例輸入驗證。提交到 OJ 時記得只交函式本身,不要連模板一起交。