練習程式解題的高中生程式解題系統(ZeroJudge)

最近發現一個不錯的線上程式解題網站,高中生程式解題系統。網站上有各種難度的題目,有適合新手的基礎題,想參加 APCS 考試或比賽的朋友也可從網站上找到相關的考古題和練習題,而且題目以中文撰寫,降低一般人理解題目的門檻。

彼得潘距離高中畢業也沒多久,接下來也來當個偽高中生,試試在高中生程式解題系統解出第一道題目。

解題系統支援的程式語言

目前解題系統只支援 C,C++,Java 和 Python。想練習 Swift 的朋友可參考題目後另外從 Xcode 練習。

連到高中生程式解題系統

註冊帳號

點選 Register 註冊帳號。

程式題目

網站上有各種難度的題目,點選 Problem 可進入問題頁面選擇有興趣的分類。

剛學會基礎程式語法的朋友可試試基礎題庫。

想參加 APCS 考試的朋友可直接搜尋 apcs。

開始解題吧

彼得潘喜歡柿子挑軟的吃,以下我們試試基礎題庫的 Eva 的回家作業

AI 解題

聽說 AI 滿會寫程式的,而且彼得潘有訂閱 GPT 4,既然錢都花了,不如請他解看看吧。如果他解不出來,下個月就把他 fire。

ps: 為了讓 AI 寫出新手容易看懂的解答,彼得潘請 AI 先不要使用 map function 和 List Comprehension。

用 python 寫出可以上傳到程式解題系統的程式,符合以下條件。
1. 用 input 讀取輸入的文字,將文字變成數字的 array 時使用 for loop,不要用到 map 和 List Comprehension。
2. 不要定義 function。
3. 將程式寫在 code block 裡。

Content
Eva的家庭作業裏有很多數列填空練習。填空練習的要求是:已知數列的前四項,填出第五項。因 為已經知道這些數列只可能是等差或等比數列,她決定寫一個程式來完成這些練習。

Input
第一行是數列的數目t(0 <= t <= 20)。 以下每行均包含四個整數,表示數列的前四項。 約定數列的前五項均為不大於105的自然數,等比數列的比值也是自然數。

Output
對輸入的每個數列,輸出它的前五項。

Sample Input #1
2
1 2 3 4
1 2 4 8

Sample Output #1
1 2 3 4 5
1 2 4 8 16

GPT 4 的回答。

t = int(input())
sequences = []

for _ in range(t):
seq = input().split()
num_seq = []
for s in seq:
num_seq.append(int(s))
sequences.append(num_seq)

for seq in sequences:
if seq[1] - seq[0] == seq[2] - seq[1]:
print(seq[0], seq[1], seq[2], seq[3], seq[3] + (seq[1] - seq[0]))
elif seq[1] // seq[0] == seq[2] // seq[1]:
print(seq[0], seq[1], seq[2], seq[3], seq[3] * (seq[1] // seq[0]))

測試執行

程式寫好後,我們在提交前最好先進行測試,測試 ok 後再提交,降低留下提交失敗記錄的機率。

點選題目下方的測試執行

輸入程式後,點選右下的測試執行

耶!看到表示成功解題的 AC 了。不過也別高興得太早,它只是針對剛剛測資框框的資料測試,所以它只代表框框裡的測資通過測試,不代表程式真的正確。

提交程式

想確認程式是否正確,必須提交程式,讓系統透過大量的測資驗證程式的正確性。

點選題目下方的 Solve it! 提交程式。

點選送出程式碼

耶!感謝 AI 的幫忙,彼得潘在 2023/5/2 於高中生程式解題系統成功解出第一道題目。

ps: 值得注意的,有些題目只有測試執行的按鈕,沒有Solve it!的按鈕,比方以下的兩光法師占卜術。

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com