以下是我參加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=13311P=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 44 6 1 7 6 1 7 4都是連續4個元素,且這4個元素就包含四種顏色,所以通通是完美彩帶,所以答案是3。第2筆測資的2 0 10 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個城市,玩家依亂數L3個城市移動,移到城市1L分,如果L是偶數則下一回合移到城市2,否則留在城市1;移到城市2得到2L分,如果L3的倍數,下一回合移到城市3,否則前往城市1;移到城市3得分是L除以10的整數商,如果L5的倍數,下一回合移到城市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往前找,若能找到第1b(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、給定一個mn行的數字迷宮,例如,以下是17

1 7

6 7 8 5 2 1 8

又例如,以下是45

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,這就要自己先找規則。

34k切牌之前如下:

        1,4,2,5,3,6

這就要自己先找規則。

3、洗牌之前如下:

1,2,3,4,5,6

這就要自己先找規則。

4、然後將以上規則寫成程式,以上自己練習才會進步。

 

三、刪除邊界

假如有矩陣如下:

4 5  #45

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/@joylintp/APCS20200105?fbclid=IwAR0rSSNXFv6HBaKzgk3HpYsB2v_vdmNcSxK0wV_z_lwZP0hObEl-KJPVe_k

https://hackmd.io/@emanlaicepsa/APCS202007

109年第3次考試題目與解答下載點

https://zerojudge.tw/Problems?page=19&&tabid=TOI

https://github.com/algo-seacow/Competitive-Programming/tree/master/apcs/10910?fbclid=IwAR11nVN-6S1T9rDlcYyULgTJka3R2eoIpyeaS7BcN5DueGYVoXSOtyhVmDQ

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/(以上都是高中試題,題目很抽象,但是高職工業科、商業科也都有程式競賽試題,這些題目很實用,對就業很有幫助,也有很詳盡解說與測試資料,有興趣的可自行觀摩下載。)

 

1101APCS術科試題 作者:Akira

1101APCS學術科試題 作者:Hackmd

 

APCS討論社群