語法書 / AA 競程語法書 上冊 / 第七單元 / OJ 上的函式實作題

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 時記得只交函式本身,不要連模板一起交