今天在 FB 的家長群組寫了一篇文章講 APCS (大學程式設計先修檢測) ,想想也許有朋友也對 APCS 有興趣,所以也轉到自己的部落格來。
APCS 是 Advanced Placement Computer Science 的英文縮寫,目的是檢測學生對於程式設計的瞭解,目前有一些大學的資工系參考 APCS 的成績來挑選學生,所以很多家長想讓孩子去考 APCS。
我先說結論,如果你的孩子平常有在寫程式,甚至有在參加程式設計比賽,那麼這是一條可以嘗試的路徑;如果數學不好 &平常沒有在寫程式,看到補習班的廣告想說多了一條升學徑路很不錯,所以想去報名補習班 &報考 APCS,那其實報名費可以省下來了,因為題目真的不簡單,而且很吃數學能力。
APCS 的考試方式
APCS 分觀念題 &實作題兩部份,觀念題題型為選擇題,共有 25 題,每題 4 分,總分 100 分,考試時間 75 分鐘;實作題 4 題,每題 100 分,總分 400 分,考試時間 150 分鐘。
計分方式採用標準參照,觀念題 90~100 分、實作題 350~400 分換算後為五級分,分數對照請參考下圖。
APCS 觀念題部份有很多遞迴題目,一題遞迴題就可以解很久,但時間祇有 75 分鐘。
純觀念題也不容易,比方說輾轉相除法的程式該怎麼寫,這個考程式功力,也考邏輯能力。
甚至還有 log 出現……數學不好的人看到這一題大概就瘋了。這其實有演算法 BigO 的觀念在裡面,學過演算法看到這一題就知道答案了,但沒學過的時候真的覺得很棘手。
觀念題的部份雖然有些題目比較難,但多做一些練習,知道怎麼解遞迴,要拿到 4 級分是沒問題的,甚至有機會拿到 5 級分;但實作題要拿高分就難多了。
實作題需要細心且手腳快
實作題部份,平均不到 40 分鐘要解一題,但它的題目一般會有兩題簡單,兩題困難,要拿到 3 級分還算容易,但要 4 級分就至少要把兩題簡單題目都答對,再答對 0.5 題困難題,這已經不太容易拿到了,5 級分就更難了。
實作題困難的原因在於,第一個,它題目敘述非常長,光是看懂題目就要花不少時間;第二個,答案的格式要非常精確,多一個空白、多一個逗號都算錯 (這邊就會卡死一堆人);第三個,每一題的第四小題通常要程式能力很強的人才寫的出來。
比方說,第一小題可能祇會用 10~100 組資料做測試,但到了第四小題很多都是用 100 萬組資料做測試,記憶體規畫做的不好根本跑不了;或是程式演算法設計的不好無法在規定的時限內 (1 秒) 跑完 100 萬筆資料……
不是程式寫出來讓它跑就好了?用 10 筆資料或 100 萬筆資料去執行會有什麼差別嗎?
舉個大家都懂的例子,要請你計算:1 + 2 + 3 + 4 + …… + 100 的和,傻傻的用紙筆慢慢加也還可以把這一題算出來。當題目換一下,要求計算 1 + 2 + 3 + 4 + …… + 1000000 的和,這時如果還用紙筆慢慢算,就算最後能得到正確答案,也要花很久的時間。
不過,如果你聽過高斯的故事,知道可以用 n(n+1)/2 的公式來計算其和,那麼無論是要從 1 加到 100,或是要從 1 加到 1000000,計算出答案的時間都差不多。
所以 APCS 會用 100 萬筆資料去測試程式,就是要求考生不但要解決問題,而且還要用足夠好演算法來解決問題。如果祇是去補習學寫簡單程式,對於演算法沒有瞭解,那這種題目都過不了關。
除了測試的資料量大之外,也有題目長度超過一整頁,光是要看懂這個題目就要花很久的時間。
所以那些原本就對寫程式很有興趣的人,可能從國中就開始寫程式,寫了好多年了,已經在鑽研資料結構、演算法的學生才適合去考 APCS。
如果都沒有寫過程式,想要靠著學幾堂課就去考試,嗯,不是那麼容易過關,因為題目真的有難度。