附錄一:高中生程式解題系統
高中生程式解題系統 (https://zerojudge.tw/) 是一個線上解題平台,使用者可以透過灠覽器在上面練習解題,另外也可以在討論區相互交流。平台裡面有各式各樣分類好的題目,從淺至深,幾乎涵蓋各種程式題型,目前 APCS 官網所公佈的歷屆實作題,也被蒐錄在網站上。目前可以用來解題的程式語言包括 C、C++、Java、Pascal 及 Python 等五種程式語言。它的首頁如下:
使用這個平台之前要先註冊,基本上直接使用 Google 帳號就可以了,非常便利。
進入首頁之後,在工具列的搜尋框輸入 APCS,搜尋後跑出以下畫面(如果你看到的內容比這還多,表示又蒐錄了新的題目):
這裡邊包括了 APCS 官網公佈的四屆實作題,本書所提供的參考解答,基本上也都是在這個平台進行測試。
點選其中一題,例如序號 3 的矩陣轉換,可以看到題目說明,基本上和 APCS 官網的題目是一樣的。如果已經註冊登入的話,還會在頁面最下方看到幾個按鈕如下:
以下簡單說明這幾個按鈕的用途。
送出解答:按下後會出現以下畫面。上面是用來解題的語言,下面是程式碼的內容,可以直接在線上作答,不過一般都是把寫好的程式碼直接複製並貼上。完成之後按下「送出程式碼」即可進行線上評測。
送出之後,系統會開始進行評測,經過一小段時間後,就會看到評測的結果。基本上,評測的結果只有以下幾種:AC, NA, WA, TLE, MLE, OLE, RE, RF, CE, SE,這些訊息的意義,在首頁有大致的說明,節錄如下:
AC (Accept):表示通過。
NA (Not Accept):多測資點的題目中未通過所有測資點。
WA (Wrong Answer):答案錯誤,並在訊息中指出錯誤行數及正確答案。
TLE (Time Limit Exceed):執行超過時間限制。
MLE (Memory Limit Exceed):執行超過記憶體限制。
OLE (Output Limit Exceed):程序輸出檔超過限制。
RE (Runtime Error):執行時錯誤,通常為記憶體配置錯誤 如:使用了超過陣列大小的位置。
RF (Restricted Function):使用了被禁止使用的函式,並在錯誤訊息中指明使用了什麼不合法的函式。
CE (Compile Error):編譯錯誤,並在訊息中列出完整錯誤訊息,以利判斷。
SE (System Error):包含編譯及執行時期未定義的錯誤。測試執行:按下之後會出現如下畫面,基本上與「送出解答」類似,不過最下方會提供一些輸入和輸出的測試資料,讓使用者在提交程式碼之前可以先進行一些基本測試。
本題狀況:按下之後,會看到所有曾經提交本題答案的使用者及檢測結果的列表。
本題討論:按下之後,會進到討論區,可以在此參與討論。
排行:按下之後,會看到解答本題的使用者排行榜,主要排行依據是程式執行效率(時間)。
一般來說,線上解題平台會針對每個題目設計一些測試資料,用來驗證使用者的程式是否正確。對於同一個題目來說,不同的平台,有可能會使用不同的測試資料,有時候一個程式在某個平台可以通過,但在另一個平台就沒辦法完全通過,這是有可能發生的事。這種情況通常表示使用者的程式,還有一些考慮得不夠完善的地方,或者程式的演算法效率還不夠快。
目前這個平台所提供的測試資料,也不一定和 APCS 官方的測試資料相同,不過根據筆者使用的經驗,這個平台的檢驗算是蠻嚴格的,如果可以通過這個平台的檢測,我想應該也可以通過 APCS 官方的檢測才對。因為 APCS 官網沒有提供官方的檢測系統,那以筆者目前所知,目前這個網站大概算是最好的檢測平台了。
建議你在這個平台上申請一個帳號,有空就上去練習看看,一定可以增加你的程式能力!