以下是我參加APCS考試,所蒐集的考題,若需要這些題目的解答,請自行購買本公司的高中資訊科技、Python程式設計或高中進階程式設計等圖書。
城市移動(108/第一梯次)
假設有一個遊戲,有3 個城市,玩家依亂數L 在3 個城市移動,移到城市1 得L 分,如果L 是偶數則下一回合移到城市2,否則留在城市1;移到城市2 得到2L 分,如果L 是3 的倍數,下一回合移到城市3,否則前往城市1;移到城市3 得分是L 除以10 的商,如果L 是5 的倍數,下一回合移到城市3,否則移到城市1。測試資料如下:
4 1 //玩4回合,起始城市是1
1 2 3 12 //四個亂數
備註:此題目為憑個人記憶,題目很好,還是呼籲主辦單位公佈試題,讓學生練習。
演算法:因為每一城市有其不同移動規則與得分方式,所以可用if分成3 部分,且因每一城市都有其移動規則,所以每一城市都要自己用1 個if else,這樣就可以計算每一次轉移到哪一城市與每一次的得分。所以這題是屬於雙層決策問題,拿到分數沒有問題。
主客場籃球賽制。(108/第二梯次)
1、連打兩場,主場球隊兩場皆贏輸出Win。
2、兩場皆輸,輸出Loss。
3、其餘輸出Tie。
4、輸入格式 :每場4節得分,主場先輸出。以下分別是主隊、客隊兩場比賽的四小節得分
15 20 25 30
15 16 17 18
5 10 15 20
5 6 7 8
完全奇數(107/10試題)
13311,13199 稱為完全奇數,請寫一程式,可以輸入一個整數N,並求出比此數大的完全奇數M 與比此數小的完全奇數P,並求其差的最小值,也就是| N-M |與| N-P |的最小值。例如, 輸入13256, 則M=13311;P=13199, 而13311-13256=55
,13119-13199=112,所以輸出112。
秘密差(106/10/01)
將一個十進位正整數的奇數位數的和稱為A,偶數位數的和稱為B,則A 與B 的絕對差值|A - B| 稱為這個正整數的秘密差。例如:263541 的奇數位數的和A = 6+5+1 = 12,偶數位數的和B= 2+3+4 = 9,所以263541
的秘密差是|12 - 9|= 3。給定一個十進位正整數X,請找出X 的秘密差。
編碼(APCS106/10試題)
1、輸入。
第一列為取碼長度l(len)。例如,
1
第二列輸入若干數字,以0結束。例如,
252 373 28 0
2、處理
將第二列數字從左邊取長度l的數字,取極大值輸出。
將第二列數字從右邊取長度l的數字,取極小值輸出。
3、範例
資料編號 |
輸入 |
輸出 |
1 |
1 (取碼長度) 252 373 28 0 |
2 3 2 max=3 2 3 8 min=2 3 2 |
2 |
2 (取碼長度) 258 0 |
25 max=25 58 min=58 25 58 |
3 |
2 (取碼長度) 123 58 612 0 |
12 58 61 max=61 23 58 12 min=12 61 12 |
密碼解碼(APCS107試題)
1、定義密碼如下:
0101 |
0111 |
0010 |
1101 |
1000 |
1100 |
A |
B |
C |
D |
E |
F |
2、輸入、輸出如下:
輸入 |
1 0101 |
2 0010 1101 |
4 1000 1100 0101 0111 |
備註 輸入的值只有以上6種 |
範例6_4a孤獨字串(APCS107/10月考題)
當一個字串,使用字母(A ~ Z)的個數最少,則他就是一個孤獨字串。例如,
“HELLO”
字串長度5,但是使用四個字母組成,但是
“ABBBAA”
字串長度6,僅使用2個字母組成,那就比上一個字串『HELLO』孤獨,本例請於所輸入字串中,找出最孤獨字串,也就是含字母種類最少者。其次,若孤獨字串有兩個以上,請繼續將這些孤獨字串按照字母順序排列,找出排在最前面的字串。例如,『ABBBAA』與『AAAABB』均謹含兩個字母,那還要繼續比較,找出字母順序最前面的字串,所以是『AAAABB』,以下是參考的測資:
5
HELLO
ABBBAA
AAAABB
GOODBYE
ABCDEFGHIJKL
表示5個測資,則輸出
AAAABB
卡通部隊(APCS 108/06月試題)
給定卡通部隊成員個數與隊伍組數。例如,以下代表有10個成員,5個隊伍,10個成員分別是ABCDEFGHIJ
10 5
AJBA
HCEFGGC
BIJDAIJ
EFCDHGI
HCEFGA
JAJB
若任兩組沒有相同成員,且含全部成員,那稱此兩對互補,請找出以上有幾組互補成員。但是AKB,KAKB,BAK視為相同隊伍。例如,本例1,4互補,2,3也互補,所以答案是2組。
完美彩帶。(APCS 108/06試題)
給定顏色個數m與彩帶長度n,例如,
4 10 #4代表有4種不同顏色,10代表有10種測資
1 7 6 4 4 6 1 7 4 7
又例如,
3 7
1 2 2 0 1 2 1
若有連續m個元素同時包含m個顏色,則稱此段為完美彩帶。例如第1筆測資的1 7 6 4、4 6 1 7 與6 1 7 4都是連續4個元素,且這4個元素就包含四種顏色,所以通通是完美彩帶,所以答案是3。第2筆測資的2 0 1與0 1 2 也是完美彩帶,所以答案是2。
程式列印
a=[1, 7,6, 4 ,4, 6, 1, 7, 4, 7]
m=4
n=10
num=0
for i in range(n-m+1):
b=set()#建立空集合
for j in range(m):
b.add(a[i+j])
if len(b)==m:
num=num+1
print(num)
14_1 108第一梯次試題
一、城市移動。(此為憑個人記憶,題目很好,還是呼籲主辦單位公佈試題,讓學生練習)
假設有一個遊戲,有3個城市,玩家依亂數L在3個城市移動,移到城市1得L分,如果L是偶數則下一回合移到城市2,否則留在城市1;移到城市2得到2L分,如果L是3的倍數,下一回合移到城市3,否則前往城市1;移到城市3得分是L除以10的整數商,如果L是5的倍數,下一回合移到城市3,否則移到城市1。測試資料如下:
4 1 //玩4回合,起始城市是1
1 2 3 12 //四個亂數
二、彩帶長度
這題和『線段覆蓋長度』演算法相同,例如,給定陣列 0 1 0 1 1 0 1 1 1 0 1 0 ,那線段長度為何(計算連續兩個1的長度,本例是3),但此次比『線段覆蓋長度』還省一個步驟,且陣列的大小完全沒問題,請看我的『中學生資訊科技與APCS,泉勝』或『高中程式設計與APCS先修檢測,台科大』。(這題在大學的演算法教科書,雖然有經典解法,但我是認為高中生不能揠苗助長,不能一味要求高中生用大學的演算法解題。所以我是將線段長度數位化,直接用循序法解題,有興趣的學生進入大學,再學更快更省記憶體的演算法。)
三、函數運算。題目大致如下:
定義f(x)=x+1,g(x,y)=x+y,h(x,y,z)=x+y-z,輸入是簡化的,請看以下測試資料。其次,評分依照3個等級給分。
等級1例如,f 1,代表f(1),並求其值,答案是2; f f 1,代表f(f(1)),並求其值,答案是3,這樣可得10分;
等級2例如,h f 1 g 2 3 4 代表h(f(1),g(2,3),4),並求其值,答案是3,這樣可得40分;
等級3例如,h f 10 g 20 300 4000 ,數字長度不限,這樣可得滿分。
四、能力指標
這題題目有點長,文意有點難以理解,但也不用去理解,反正就照著題目的定義寫程式就好,因為這題主要在考迴圈與陣列的索引變化。n個人,1 到n排名,給予b(i)陣列稱為能力指標,給予p(i)陣列,稱為潛力指標。s(i)定義為每個人的『無法超越人數』,每個s(i)的定義是『從i往前找,若能找到第1個b(j)>b(i)+p(i)的位置j,就稱為這個人的『最大可挑戰人數』為『i-j-1』;若找不到沒有符合條件的『b(j)>b(i)+p(i)』,則其『最大可挑戰人數』定義為『i-1』。
14_2 108年第二梯次術科試題
一、主客場籃球賽制。
5、連打兩場,主場球隊兩場皆贏輸出Win。
6、主場球隊兩場皆輸,輸出Loss。
7、其餘輸出Tie。
8、輸入格式 :每場4節得分,主場先輸出。以下分別是主隊、客隊兩場比賽的四小節得分。
15 20 25 30 #第一天主場球隊四小節得分
15 16 17 18 #第一天客場球隊四小節得分
5 10 15 20 #第二天主場球隊四小節得分
5 6 7 8 #第二天客場球隊四小節得分
二、機器人走迷宮
1、給定一個m列n行的數字迷宮,例如,以下是1列7行
1 7
6 7 8 5 2 1 8
又例如,以下是4列5行
4 5
7 4 2 12 13
8 6 5 1 4
9 19 20 21 3
3 4 7 6 9
2、機器人以最小值為起點。
3、機器人可以有4個探測方向,每次都選四個方向中的最小值,只能在方格紙內移動,且走過的不能重複走,走到無路可走時,請統計走過數字的和。例如,第1個測資的移動方式是1+2+5+8+7+6;請看下表較好理解。
6 |
7 |
8 |
5 |
2 |
1 |
8 |
4、第2個測資的移動方式是1 +4 +3+9+6+7+4+3+9+8+6+4+2+5+20+19,請看下表較好理解。
7 |
4 |
2 |
12 |
13 |
8 |
6 |
5 |
1 |
4 |
9 |
19 |
20 |
21 |
3 |
3 |
4 |
7 |
6 |
9 |
5、計分方式
測資m=1 n<100 ,這樣30分
測資 1< m ,n <100 ,這樣70 分
這題的演算法同『老鼠走迷宮』程式,請先看拙著『高中進階程式設計與APCS』,看懂了,就能寫出程式,這就留給讀者練習,這樣才有樂趣。
三、卡通部隊。(請看7_4節)
四、完美彩帶。(請看7_4節)
14_3 108第三梯次
上一次108/6月試題,選C就像騎腳踏車,選Python簡直騎機車,選錯工具,真的會令人吐血,但這次,我是認為這一問題已經克服,選哪一語言都一樣了。
一、音階校正
給定若干音階,例如
8 (8個數字)
1 7 8 8 9 16 17 26
從第4個起,若
|yi-yi-1|>5
則將此音修正為前3音的中位數。例如,以上音符修正如後如下:
1 7 8 8 9 8 8 8
二、樸克牌洗牌
原本n張樸克牌,
1,2,3,…,n-1,n
定義以下洗牌模式。
洗牌:1,n/2+1, 2,n/2+2,…,n/2,n
反洗:1,3,5,…,n-1,2,4,6,…n
k切:k+1,k+2,n…,1,2,k (k>=3)
例如,
1,2,3,4,5,6
經過洗牌後,變成
1,4,2,5,3,6
經過4切後變成
3,6,1,4,2,5
經過反洗牌後變成
3,1,2,6,4,5
以上請自我練習,但是本次是一個反向操作,例如,
6 3 (n=6張牌,m=3次操作)
3 1 2 6 4 5 (最後的結果)
1 4 2 (三次的操作是 洗牌,4切,反洗牌)
請問最初的排列是什麼?答案如以上示範
1 2 3 4 5 6
自我練習
1、現在程式要求是,給操作步驟、給結果,然後要求初始狀態。所以要自己尋求規律性,寫出演算法。本例測資如下,
3,1,2,6,4,5
2、反洗牌之前將會是:
3,6,1,4,2,5
3,1,2,6,4,5如何轉為3,6,1,4,2,5,這就要自己先找規則。
3、4k切牌之前如下:
1,4,2,5,3,6
這就要自己先找規則。
3、洗牌之前如下:
1,2,3,4,5,6
這就要自己先找規則。
4、然後將以上規則寫成程式,以上自己練習才會進步。
三、刪除邊界
假如有矩陣如下:
4 5 #4列5行
1 1 1 0 1
0 1 0 1 1
0 0 0 0 0
0 0 0 1 0
1、每次僅能修正4個邊界的列或行的值,使得這一列或這一行所有元素相同,那就可刪除這一個邊界,
2、每次都選修正最少,且能刪除最多數字的行或列。例如,上例四個邊界,下邊界是(00010)、右邊界是(1100)、上邊界是(11101)、左邊界是(1000),只要將索引(3,4)修改為0,那就可刪除,所以矩陣剩下如下:(修改個數=1,累積個數=1,本例下邊界只要修改一個值,就可刪除5個,上邊界也是修改1個,可刪除5個,同分時,刪除順位是下、右、上、左)
1 1 1 0 1
0 1 0 1 1
0 0 0 0 0
2、接著第3列直接刪除,結果如下:(修改個數=0,累積個數=1)
1 1 1 0 1
0 1 0 1 1
3、接著第5行直接刪除,結果如下:(修改個數=0,累積個數=1)
1 1 1 0
0 1 0 1
接著將第1列索引(0,3)修改為1,也可刪除,結果如下:(修改個數=1,累積個數=2)
0 1 0 1
剩下一列,刪除任務結束,所以僅需修改2個地方,答案就為2。以下程式,當同分時,優先順序是『下、右、上、左』,其次,若當同分時,還要再比較能刪除最多的元素,這就請讀者自行練習。
第四題 皮卡丘闖關遊戲
測資第一列定義皮卡丘的跳躍範圍、目標值、左跳步數、右跳步數;第二列是各點的值,如下:
5 3 1 2
0 3 2 3 5
以上代表跳躍範圍是5(起點是索引0),目標值是3,左鍵是跳躍1步,右鍵是跳躍2步,5個點的值分別是0,3,2,3,5。其次,每次僅能左跳與右跳,且不能跳出去,也不能跳到下次會造成出界的位置,例如,不能跳到索引0,3,4,因為這些位置下次會出界。例如,本例輸出將會是2。過程如下:第1次右跳到達索引2,第2次僅能左跳了,因為右跳後索引4不行,再左1次,到達索引1,其值是3,遊戲結束,答案是2.
提示:
這題也是要先學習『老鼠走迷宮』的演算法,其次『老鼠走迷宮』是一個很經典點的人工智慧演算法,很多機器人程式也用得上。請自行參閱拙著泉勝『高中進階程式設計與APCS』。個人還是要強調,程式設計要能願意自己思考,不要一直追問老師答案,這樣不會進步。也不能說老師為什麼也不會,因為程式設計千變萬化,網路競賽試題多如牛毛,學生那麼多,每個人都要依賴老師,老師做到鞠躬盡瘁也作不完,而且一直看老師解答,學生也不會進步,所以老師不能這樣害自己也害學生。
109年第1次考試題目
109年第2次考試題目
此兩次題目,我在臉書有看到下載點,由台南一中高材生『曹宸睿』提供,下載點如下:
https://hackmd.io/@emanlaicepsa/APCS202007
109年第3次考試題目與解答下載點
https://zerojudge.tw/Problems?page=19&&tabid=TOI
AP325-從APCS實作題檢測三級到五級 作者:吳邦一教授
本人著作偏重入門,若APCS要拿4~5級分,可參考吳邦一教授的『 AP325-從APCS實作題檢測三級到五級』,請臉書搜尋『吳邦一』
高中生程式解題系統 https://zerojudge.tw
台中女中解題系統 www.tcgs.tc.edu.tw:1218
高雄市飆程式網 http://khcode.m-school.tw/
高級中學技藝競賽歷屆試題 http://sci.me.ntnu.edu.tw/(以上都是高中試題,題目很抽象,但是高職工業科、商業科也都有程式競賽試題,這些題目很實用,對就業很有幫助,也有很詳盡解說與測試資料,有興趣的可自行觀摩下載。)