APCS 經驗談 ===== ## 我是誰 我接觸程式設計的緣由比較特別,雖然從國小就發現對電腦有興趣,但都不知道有什麼相關資源,也沒特別動力去學習 國中在巴哈的 Minecraft 公會遇到一群 [SITCON 學生計算機年會](https://sitcon.org) 的網友,就趁著那個機會加入他們,開始學習 高中除了很多人參加的演算法競賽外,我也因為社群朋友的邀請參加了資訊安全類型的競賽 雖然跟大學生比起來我沒有特別厲害,但是靠著年齡優勢,出去許多比賽都被特別照顧 今年個人申請靠著 APCS 組通過第一階段篩選 也因為這些年累積的經驗,順利在面試階段通過 28 取 3 的競爭錄取交大資工 ## 什麼是 APCS APCS 為 **A**dvanced **P**lacement **C**omputer **S**cience 的英文縮寫,是指「大學程式設計先修檢測」,現在都還是免費報名。 分為**觀念題**及**實作題**,這兩部分都是中文命題,最高五級分 **觀念題**是四選一的單選題,除了兩三題是計算機概論外,其他都是用 C 語言寫的 **程式設計實作題**以撰寫完整程式解決問題為主,可自行選擇用 C, C++, Java, Python 撰寫程式 ## 報考動機 ### 跟風考考看 我上高中才開始學 C 語言,第一次報名檢測是在高一下的時候,當時雖然觀念題有滿級分,但實作題只拿到三級 不過輸出成績時官方提供選擇哪幾場的功能,就算考差也不用擔心會對後續造成影響 ### 放到備審資料作為能力證明 除了少數學校上課會教外,多數高中生可能連程式碼都沒看過,願意學習程式代表高中就確定對資訊的興趣,這種自學的能力也是大學教授們會喜歡的 ### 透過 APCS 組彌補學科劣勢 今年交大資工乙組第一階段篩選的門檻除了數學滿級分外,英文 + 自然最多只能掉 2 級分 但因為我有 APCS 滿級分的優勢,以學測 48 級分就通過了一階篩選,不過相對的就是二階面試競爭很激烈 這次交大 APCS 組共有 28 人通過一階篩選,但預計錄取人數只開 3 個名額,而且對手們都會寫程式,需要拿出更多相關成績才有機會錄取 ### 抵免大學學分 目前就師大自己承認學分,未來很可能有其他學校跟進 ## APCS 題型說明 官方有公開 [歷屆試題](https://apcs.csie.ntnu.edu.tw/index.php/questionstypes/previousexam/) 可供參考,這邊舉幾題簡單解釋 ### 基礎觀念理解(basic concepts understanding) 基礎觀念理解會有像是計算機概論的題目 ![](https://i.imgur.com/wKR28TL.png) #### 運算符號的意義 `|` VERTICAL LINE 直線(豎槓) -> OR 或 `!` EXCLAMATION MARK 驚嘆號 -> NOT 不 有點類似高一下的迪摩根定律 OR 是取聯集 NOT 是取補集 ### 程式除錯(code debugging) 程式除錯也是蠻重要的一環,我也看過朋友犯下類似這樣的錯誤 ![](https://i.imgur.com/j0uSsSA.png) 這個例子中 i 會從 0 開始,每次 +5,一路到 95, 100,共執行了 21 次 (A) 一樣是從 0 開始,但改成每次 +1,一路到 19 為止,正確的印出了 20 次 Hi (B) 將起始值從 0 改為 5 (C\) 最後一個數字從 100 變成了 95 (D) 頭尾都少一了,從 5 到 95 只有 19 次 ### 程式運行追蹤(code tracing) 像這種題目就比較複雜了,通常要先會寫程式才看得懂 ![](https://i.imgur.com/E1EJuqL.png) 要你用大腦判斷程式執行的結果,但像這題範圍到 100,就要找出規律 從 G(100) 函式可以看出 for 迴圈的 i 從 0, 1, 2, 3 一直到 99,因此會從 K(0), K(1) 開始呼叫,一直到 K(99) 為止,其中每次進入 K(b) 時會先將全域變數 n 增加 1 那句 if 中的 % 百分比符號在程式語言中代表除法的取餘數,假如 b 除 4 的餘數不為 0,就執行 K(b+1) ### 程式填空(code completion) 有些題目會提供半完成的程式碼,問你要選哪段才會出現正確結果 ![](https://i.imgur.com/fA9akkp.png) 可以將四個式子一一帶入 (A) 光是 14 * 13 就超過 100 了,顯然不可能 (B) 14 + 11 + 8 + 5 + 2 的確是 40 (C\) 這種可以先列出來 F(14) = 14 - F(12)、F(12) = 12 - F(10),等列到 F(4) = 4 - F(2) = 2 後,開始一層一層往上推 F(4) = 2, F(6) = 4, F(8) = 4, F(10) = 6, F(12) = 6, F(14) = 8, Ans = 8 (D) 這個式子有三種解讀方式 1. 第一種是編譯器邏輯,這裡的 3n 的 n 不是直覺上的三倍,會被編譯器視為 3 的後綴,又因為沒有 n 這種後綴,會造成編譯失敗無法執行 2. 第二種是直覺上來看,由於 3\*14 + 1 = 43,3\*43 + 1 = 130,再來變成 391, 1174, 3523 等數字,永遠不會有答案 3. 第三種是程式實際的行為,由於電腦的空間有限,所以 int 這種資料型態只能儲存範圍大約在 ±2,147,483,647 之間的整數,到了 1,872,532,363 後,乘三會變成 1,322,629,794,反而減少了,這是 Overflow 整數溢位捨棄高位數的結果;下一個變成 -327,077,913,於是小於 4 就回傳 F(14) = -327,077,913 ### 實作題:三角形辨別 寫這種題目與其說是考程式語言,不如說是在考邏輯能力 ![](https://i.imgur.com/FykToMy.png) 像這題用到的「兩邊之和大於第三邊」跟「畢氏定理」是國二的東西 但 APCS 是檢定不是競賽,連判斷方式都給你了,只要用電腦的語言寫出來就好 ![](https://i.imgur.com/7fj5bIX.png) 每題會給兩三筆測試資料,以這題來說應該不用我解釋各位也看得懂 但不是通過範例測資就好,還要考慮到有沒有邊界狀況,像是假如兩個數字乘起來太大,就可能造成錯誤 ![](https://i.imgur.com/Ojs6uBb.png) 這題太簡單了,沒有分測資範圍 但多數題目會有部分給分的狀況,像這是另一題的截圖 ## 如何準備 APCS 檢測 再來是一些推薦給學弟妹們的準備方式 ### 台大資訊之芽課程 目前從身邊朋友打聽到的消息中,資訊之芽課程可以算是裡面最紮實的一個 可惜今年度課程已經在進行中了,無法報名參加,但 [教學講義](https://tw-csie-sprout.github.io/c2019/) 是公開在網路上的,很適合新手拿來學習 有興趣想參加的話,今年十二月記得鎖定他們 [粉專](https://fb.com/ntucsiesprout/),明年的這時候就有做不完的回家功課了 ### 台中女中線上解題系統 通常寫演算法程式除了自己測試外,網路上有許多解題平台,除了提供大量題目可供練習,也會幫你驗證答案是否正確 中文的有全台最大的 [ZeroJudge](https://zerojudge.tw/)、建中 [TIOJ](https://tioj.ck.tp.edu.tw/)、中女中 [Green Judge](http://www.tcgs.tc.edu.tw:1218/) 等 英文有每週舉辦兩三次競賽的 [CodeForces](https://codeforces.com/)、全球權威的 [UVa Judge](https://uva.onlinejudge.org/) 以及日本的 [AtCoder](https://atcoder.jp/) 等許多平台 [Green Judge](http://www.tcgs.tc.edu.tw:1218/) 這套是中女中上課教學用的解題系統,題目從最基礎的 Hello World、加減乘除、字串處理開始,依照難度循序漸進,適合想考 APCS 的初學者練習用 ### 板中校內授課講義 每年資訊奧林匹亞會選出全台前 12 強的高中生們,進入選手培訓營,今年板中就包下兩個名額 板中內部除了學生自主發起的 [培訓課程](https://ic.sean.cat/) 外 每週二晚上開立 AP 大學先修課程,真的可以抵免學分 ### 演算法筆記 解釋的太過詳細了,可當字典參考 我自己在 Google 搜尋演算法時都會加上「演算法筆記」這個關鍵字,裡面內容品質大多還蠻不錯的 ## 相關社群:SITCON 學生計算機年會 我國中就是從 SITCON 這個社群接觸到寫程式的學習資源 ![](https://sitcon.org/branding/withname.png) ### 一個於網路發起,鼓勵自發學習、切磋成長的學生社群 這是一個學生自發組成的研討會,秉持著以學生為主軸的核心價值,藉以凝聚與傳遞學生的力量。 希望藉由提供一個經驗交流與資訊技術實務分享的平台,使已有成就者能夠傳承己身經驗,並讓初入茅廬者得以對資訊科學有更深入的瞭解;進而達到「學以致用、教學相長」的目標。 ### 每年三月在中研院舉辦 1,000 人規模的年會 今年三月我也受到 SITCON 邀請,站在中研院的演講廳 [向會眾們分享](https://sitcon.org/2019/agenda/71d881df-22a7-48b9-b6e5-3996e6ff02d2/) ### 平時可於社團/群組線上交流 平常在 [Telegram 群組](https://t.me/SITCONgeneral/) 也是閒聊居多,遇到任何問題只要表現出誠意,在裡面可以輕鬆的提問 ## 相關社群:COSCUP 開源人年會 ![](https://api2018.coscup.org/assets/coscup-1NLdnQEZeeTTDhFaqBbiFnt5g-cf7LFLX.png) + 台灣自由軟體運動重要的推動者之一 + 除了邀請國際的重量級演講者之外, 台灣本土的自由軟體推動者也經常在此發表演說。 + 每年八月在台科大舉辦 1,500 人規模的年會 今年搶票也快開始了,記得關注 [粉絲專頁](https://fb.com/coscup) 最新訊息 ## 放榜結果 累積了足夠的經驗,在面試過程中也會比較順利 ![](https://i.imgur.com/cxikiIE.png) 這次我除了交大正取外,政大、淡江也都拿到了 正取1 只有成大因為學測四科就佔了 30%,被擠下去到 備3 了 ## 其他資源連結 + 校內分享投影片:https://bit.ly/apcs-cssh + 備審資料參考:https://img.sean.taipei/2019/05/nctu.pdf + 演講議程錄影:https://youtu.be/9ZF_qOAychw