1.將 陣列內容設定如下:
陣列註標為偶數者為等比級數首項為1,公比為1.6,採四捨五入至整數,因此 x[0]=1、x[2]=2、x[4]=3、x[6]=4、x[8]=7...
陣列註標為奇數者為費式數列 a1=a2=1,an=an-1+an-2, 因此 x[1]=1、x[3]=1、x[5]=2、x[7]=3、x[9]=5...
程式請輸出 30 項,每個數據間空 1 格。

解答
2. 將長度為23的陣列內容設定如下:
從陣列註標 0 為起點設為1,每隔6個空間,在第7個空間設置前數字的接續值。
程式請從 註標 0 至 22 輸出陣列內容。
陣列註標
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
陣列值
1
11
21
8
18
5
15
2
12
22
9
19
6
16
3
13
23
10
20
7
17
4
14


解答
3.某 二維陣列如同九宮格內容設定如下:
8
1
6
3
5
7
4
9
2
規則:
數字順序往右上方向設置,整個二維陣列如同球狀,上下相鄰且左右相鄰。
碰到已經設定數字的九宮格,則移動方向為「往後退 1 格」。
程式請輸出九宮格,每一個數字之間空一格。
(註:此陣列又名魔術方陣,九宮格內之橫、豎、斜的數字相加均為定值。


解答
4.某二維陣列內容設定如下:
名字 John Mary Dali Babe Lui Kuky
年齡 21 18 34 17 53 48
體重 56 49 96 46 68 55


程式輸入 2 個整數,第一個整數
若為 0 表示離開程式,
若為 1表示下一個輸入為 1 字元,程式搜尋姓名包含那個字元的所有人,並輸出該人之姓名、年齡、體重。
若為 2表示下一個輸入為 1 整數,程式搜尋年齡大於等於該整數的所有人,並輸出該人之姓名、年齡、體重。
若為 3表示下一個輸入為 1 整數,程式搜尋體重小於等於該整數的所有人,並輸出該人之姓名、年齡、體重。

以上搜尋若找不到符合的資料,則輸出 Not found

程式輸入
1.第一列為正整數 n (1≤n≤100),表示有 n 個人。
2.接著有 n×3 列,分別為每一個人的姓名(皆為大小寫字母組合,不超過10個字)、年齡(10 ~ 100)、體重(20~200)。
3.輸入完每人資料後,接著是輸入功能字元 ( 0 ~ 3)。
4.功能字元為 0,則後無資料。
若為1,則下一列為 1 字元(為大小寫字母)。
若為2,則下一列為一正整數。
若為3,則下一列亦為一正整數。

程式輸出
1.若為功能1,則程式必須先輸出 Name contains the character %c\n,%c 為欲搜尋的字元,
    接著是輸出搜尋結果 。
2.若為功能2,則程式必須先輸出 Age above or equal to %d\n,%d 為欲搜尋的年齡,
    接著是輸出搜尋結果 。
3.若為功能3,則程式必須先輸出 Weight less than or equal to %d\n,%d 為欲搜尋的體重,
    接著是輸出搜尋結果 。
4.若搜尋未發現,程式必須輸出 Not found。

【範例】


本程式開發時,因測試資料繁複,因此建議使用既定資料,或讀取檔案方式,以避免煩雜的輸入。
下列題供文字檔供參考。
程式既定的資料
程式讀檔方式
測式文字檔
程式讀檔方式解答
程式解答


5.某 文字邊碼規則如下:
1.輸入一串字 (大小寫字母、數字及鍵盤上其它字元),字串長度不大於 106
2.輸入一整數 k (小於字串的長度)
3.字串依據輸入的整數將字串橫向排列長度為 k 的矩形文字
4.輸出縱向讀取的文字

範例;
1.輸入 ABC-(123456)+(DEF)*KH
2.輸入 4
3.文字橫向排列為
ABC-
(123
456)
+(DE
F)*K
H
4.縱向讀取文字得到新字串為;
A(4+FHB15()C26D*-3)EK


範例;
1.輸入 ABCDEFGHIJKLMNOPQ RSTUVWXYZ 1234567890
2.輸入 7
3.輸出 AHOU18BIPV29CJQW30DK X4ELRY5FMSZ6GNT 7


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


6.承 上題請將編碼後的文字還原
1.程式輸入編碼後的文字
2.再輸入編碼前的數字 k
3.程式輸出原字串

範例;
1.輸入編碼後的字串:
A(4+FHB15()C26D*-3)EK
2.輸入編碼數字 4
3.輸出原文字:
ABC-(123456)+(DEF)*KH


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


7.找 出陣列中交錯乘積的最大值及平均值

1.輸入 n 值(整數)表示下列有 n (2≤n≤10) 組陣列。
2.輸入 n 組數字(整數),第一位數字為該陣列共有 m 個數字 (1≤n≤10),以後 m 個數字為陣列值(以空格隔開)(1≤陣列值≤105)。
3.程式對於每一數字互相交錯相乘,並找到乘積最大者為何者相乘及所有乘積平均值取無條件捨去至整數。

【範例】
1.輸入整數 n
    2
2.輸入編碼數字 2 組數字
    3 5 11 7
    4 1 9 7 12
3.交錯相乘的乘機分別是:
    5 7 11 45 63 99 35 49 77 60 84 132
    最大者為 (1,2) * (2,4) = 132
    平均為 55


【範例】
1.輸入整數 n
   3
2.輸入編碼數字 2 組數字
    3 11 6 4
    2 7 15
    4 13 20 5 2
3.交錯相乘的乘機分別是:
    77 42 28 165 90 60 143 78 52 220 120 80 55 30 20 22 12 8 91 195 140 300 35 75 14 30
    最大者為 (2,2) * (3,2) = 300
    平均為 83


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


8.假 設有 2 個已經經過排序後的數列 a , b,而且 a,b 數列內的數字均不相同,如下所示:
a = 1 , 3 , 11 , 23 , 24 , 25 , 30 , 40
b = 3 , 5 , 11 , 19 , 30

請寫一程式計算 a , b 這兩組數列,相同的數字有多少 ? 以上為例,相同的數字有 a[1]、b[0] = 3, a[2]、b[2] = 11, a[6]、b[4] = 30,共三組。
1.程式輸入兩數列,數列開頭第一個數字表示該數列的總數量(不超過 105個),接著為該數列的每一個數字(不大於106),每個數字以空格格開。
2.程式輸出幾組相同的數字。

【範例】
輸入:
8 1 3 11 23 24 25 30 40
5 3 5 11 19 30
輸出:
3


程式既定的資料
程式讀檔方式
測式文字檔
程式讀檔方式解答
程式陣列設定方式解答
程式解答


9.假 設有 2 個已經經過排序後的數列 a , b,如下所示:
a = 1 , 3 , 11 , 23 , 24 , 27
b = 3 , 5 , 17 , 19 , 24

請寫一程式計算 a 數列的元素比 b 數列大的數量,以上為例,
a 數列大於 b[0] 的個數為 11 , 23 , 24 , 27,共 4 個
a 數列大於 b[1] 的個數為 11 , 23 , 24 , 27,共 4 個
a 數列大於 b[2] 的個數為 23 , 24 , 27,共 3 個
a 數列大於 b[3] 的個數為 23 , 24 , 27,共 3 個
a 數列大於 b[4] 的個數為 27,共 1 個
所以總數為 4+4+3+3+1 = 15 個


1.程式輸入兩數列,數列開頭第一個數字表示該數列的總數量(不超過 105個),接著為該數列的每一個數字(不大於106),每個數字以空格格開。
2.程式輸出 a 大於 b 數列的數字,總共有幾個。

【範例】
輸入:
8 1 3 11 11 24 24 30 40
4 3 5 11 34
輸出:
17


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


10.假 設有一經過排序後的數列如下:
2 , 2 , 2 , 3 , 6 , 6 , 6 , 6 , 11 , 12 , 15 , 17 ,17
請寫一程式計算哪一個數字數量最多。以上面數列為例,數字 6 的數量有 4 個為所有數字的最多數。(若有相同最多數量者,只要輸出最前面的即可)
1.程式輸入一數列,數列開頭第一個數字表示該數列的總數量(不超過 105個),接著為該數列的每一個數字(不大於106),每個數字以空格格開。
2.程式輸出最多數列的數字及其數量。

【範例】
輸入:
13 2  2  2  3  6 6 6 6 11 12 15 17 17
輸出:
6 4


【範例】
輸入:
8 3 4 4 5 6 8 8 9
輸出:
4 2


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


11.假設有 2 個已經經過排序後的數列 a , b,而且 a,b 數列內的數字均不相同,如下所示:
a = 2 , 7 , 11 , 19 , 28 ,
b = 4 , 9 , 15 , 17 , 24 , 25
兩數列每一個元素的差值,我們稱為數列間的距離,程式請求出數列間的距離最小者。
a[1] 與 b 的距離分別為 |a[1]-b[1]|=2、|a[1]-b[2]|=7、|a[1]-b[3]|=13、|a[1]-b[4]|=15、|a[1]-b[5]|=22、|a[1]-b[6]|=23
a[2] 與 b 的距離分別為 |a[2]-b[1]|=3、|a[2]-b[2]|=2、|a[2]-b[3]|=8、|a[2]-b[4]|=10、|a[2]-b[5]|=17、|a[2]-b[6]|=18
a[3] 與 b 的距離分別為 |a[3]-b[1]|=7、|a[3]-b[2]|=2、|a[3]-b[3]|=4、|a[3]-b[4]|=6、|a[3]-b[5]|=13、|a[3]-b[6]|=14
a[4] 與 b 的距離分別為 |a[4]-b[1]|=15、|a[4]-b[2]|=10、|a[4]-b[3]|=4、|a[4]-b[4]|=2、|a[4]-b[5]|=5、|a[4]-b[6]|=6
a[5] 與 b 的距離分別為 |a[5]-b[1]|=24、|a[5]-b[2]|=19、|a[5]-b[3]|=13、|a[5]-b[4]|=11、|a[5]-b[5]|=4、|a[5]-b[6]|=3
由上可知 b[1]-a[1]=2 為最小值

1.程式輸入一數列,數列開頭第一個數字表示該數列的總數量(不超過 105個),接著為該數列的每一個數字(不大於106),每個數字以空格格開。
2.程式輸出最短距離及 a b 兩陣列註標(相同者以 a 最小值優先)。

輸入:
5 2 7 11 19 28
6 4 9 15 17 24 25
輸出:
2 1 1


【範例】
輸入:
7 4 10 11 16 24 25 31
4 1 7 14 19
輸出:
2 4 3


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


12.假設有一數列 a ,有 n (不超過 106個) 個元素,若 a[0]+a[1]+...+a[i] = a[n-1]+a[n-2]+...+a[j],我們稱為【前後等值】,程式請計算 a 數列有多少組【前後等值】

1.程式輸入一數列,數列開頭第一個數字表示該數列的總數量(不超過 105個),接著為該數列的每一個數字(不大於106),每個數字以空格格開。
2.程式輸出多數組【前後等值】。

【範例】
若 a 數列為 2 , 3 , 6 , 5 , 4 , 8 , 3
則  a[0]+a[1]+a[2] = 11 = a[6]+a[5]
a[0]+a[1]+a[2]+a[3]+a[4] = 20 = a[6]+a[5]+[4]+a[3]
a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6] = 31 = a[6]+a[5]+[4]+a[3]+a[2]+a[1]+a[0]
共有三組【前後等值】

輸入:
7 2 3 6 5 4 8 3
輸出:
3

程式既定的資料
程式讀檔方式
測式文字檔
程式讀檔方式解答
程式陣列設定方式解答
程式解答


13.請在一個三維陣列中,找出失去的數字。
下列為一 3×4×2 陣列,陣列內容為 1 2 3 4 7 8 10 11 12 13 14 15 16 17 18 19 23 24 25 26 27 29 30 31
其中最大數字為31 (座標(1,3,2)),從 1 至 31 中,5 6 9 20 21 22 28 失落,請寫一程式找尋失落的數字,及最大未置的座標。
1.輸入矩型 寬 長 高 w l h (1≤w、l、h≤200),以空格隔開。
2.連續 h 列,每一列有 w 個數字(數字可重覆,且不大於106)以空格隔開。
3.程式依序輸出失落的數字。以空格隔開。若無失落的數字,請輸出 0。

【範例】
輸入
4 3 2
10 23 17 16
12 27 7 18
4 3 11 19
29 14 13 15
8 1 24 25
31 2 26 30

輸出
1 3 2 5 6 9 20 21 22 28


【範例】
輸入
5 4 1
5 7 11 9 22
2 4 21 10 3
27 4 1 16 15
17 1 22 7 18

輸出
1 3 1 6 8 12 13 14 19 20 23 24 25 26


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


14.假設一數字 27271,分解其數字如下:
1 位數: 2 7 2 7 1
2 位數: 27 72 27 71
3 位數: 272 727 271
4 位數: 2727 7271
5 位數: 27271
統計每個數字出現的次數如下:
1 位數:2 2次、7 2次、1 1次
2 位數:27 2次、72 1次、71 1次
3 位數:271 1次、272 1次、727 1次
4 位數:2727 1次、7271 1次
5 位數:27271 1
請寫一程式分析每位數字出現的次數。
其中若數字為 0 或 00、000...皆以 0 計。01、001、0001...皆以 1 計,依此類推。

問題流程
1.第一列的數字表示一共有 N 個數字
2.連續輸入 N (1≤N≤106)個整數 (1≤整數≤99999),以空格隔開,最後一個數字後面沒空格。
3.分析每個數字的 1 至 5 位數
4.統計每個數字
5.輸出每個數字出現的次數

【範例】
1
35153
輸出


【範例】
5
175 27527 42002 62002 20
輸出


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


15.寫一程式計算迷宮中移動次數。
下列圖一為一 3x3 迷宮,其中每一格都有一正整數,座標表達方式左上角為 0,0 往右依序為 1,0 2,0 (x 遞增)
,往下依序為 0,1 0,2 (y 遞增)。 假設迷宮起始點為 1,0 ,則迷宮中的數字為 1,也就是起始數字為 1,從起始數
字開始尋找周邊的數字,如果周邊出現比目前數字增加 1 者,將起始點往該數字移動,依此類推,請參考圖 2。
由圖 2 可知從起始數字 1 可移動至數字 5 (紅色箭頭移動方向)。因數字 5 周邊只有 7 與 9 (差值均超過 1),
因此移動終止。程式計算總移動次數為 4 (紅色箭頭數量)。

圖一 圖二
16.寫一程式輸出迷宮路徑。
小華是一個電影愛好者,昨日他看了一部移動迷宮的影片,影片情節描述一群人被一家公司當試煉品,丟在一個被迷宮包圍的圓形區域內,這一群人為了逃出圓型區域,他們必須找尋迷宮的出口路徑,因此他們挑選腳程比較快的跑者,每天日出晚歸的跑進迷宮抄寫路徑,直到有一天終於抄到完整的路徑了,但是因資料太複雜,所以必須寫一程式輸出路徑走法,5×6迷宮如下,說明隨後:
1
0
0
6
7
0
2
3
0
5
0
8
0
0
4
0
10
9
0
0
0
0
11
0
0
0
0
0
0
12


1.迷宮故定從左上角入口,右下角離開。
2.離開的路線以數字 1 開始往後以自然數計數。
3.0 表示空白非路徑。
4.每一個相鄰的數字,有8個方向,分別由8個英文字代替。(如下圖)



5.程式必須敘述路徑走法,以上為例,1至2的方向為往南,因此需輸出 S,1至2的方向為往東,因此需輸出 E,依此類推解答如下:
SEurNEuSWSu
6.迷宮保證只有一條路徑。

輸入
1.輸入矩陣維度 M×N (2≤M、N≤1000),以空格隔開。
2.輸入矩陣資料,每一列的資料以空格隔開。

輸出
1.輸出解答

【範例】
輸入
5 6
1 0 0 6 7 0
2 3 0 5 0 8
0 0 4 0 10 9
0 0 0 0 11 0
0 0 0 0 0 12

輸出
SEurNEuSWSu



【範例】
輸入
4 3
1 0 0
0 2 0
3 0 5
0 4 6

輸出
uhurS



測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


17.寫一轉置矩陣程式。

說明
矩陣 A 的轉置運算是把A的橫列寫為 AT 的縱行,把A的縱行寫為 AT 的橫列,即為所求。



輸入
1.程式輸入第一列為矩陣 A 的維度 m n (中間以空格隔開)。
2.第二列以後,連續 m 列,每一列有 n 個資料 (每個資料以空格隔開)。
3. 1≤m、n、k≤100。-106<陣列內的數值<106

輸出
1.輸出 A 矩陣的轉置矩陣 AT

以下輸入輸出範例,可自行複製至程式碼中使用。

輸入
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
    for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);

輸出
for(i=0;i<n;i++){
    for(j=0;j<m;j++)
        printf("%d ",aT[i][j]);
    printf("\n");
}

【範例】
輸入
2 3
23 16 17
90 11 1

輸出
23 90
16 11
17 1


【範例】
輸入
2 2
5 11
0 8

輸出
5 0
11 8



測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


18.寫一矩陣相乘程式。

說明
矩陣最重要的運算方式為矩陣乘積。它只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有定義。一般單指矩陣乘積時,指的便是一般矩陣乘積。
若 A 為 m × n 矩陣,B 為 n × k 矩陣,則他們的乘積 AB(有時記做A·B)會是一個 m × k 矩陣。其乘積矩陣的元素如下面式子得出:

輸出其中 1≤i≤m,1≤j≤k



輸入
1.程式輸入第一列為矩陣 A 的維度 m n (中間以空格隔開)。
2.第二列以後,連續 m 列,每一列有 n 個資料 (每個資料以空格隔開)。
3.第 m+2 列是矩陣 B 的維度 n k,但因 n 必須與 A 的 n 相同故僅輸入 k 即可。
4.第 m+3 列以後,連續 n 列,每一列有 k 個資料 (每個資料以空格隔開) 。
5. 1≤m、n、k≤100。-106<陣列內的數值<106

輸出
輸出 A·B 的矩陣資料 以 m×k 表示。

假設您的 A·B 結果是放在 c 陣列,則下列是矩陣輸出的範例程式,可複製至您的程式中使。
for(i=0;i<m;i++) {
    for(j=0;j<k;j++)
        printf(" %lld ",c[i][j]);
    printf("\n");
}

【範例】
輸入
3 2
5 12
17 13
4 8
3
3 11 9
2 7 0

輸出
39 139 45
77 278 153
28 100 36


【範例】

輸入
2 1
11
-7
4
27 13 -14 -8

輸出
297 143 154 88
189 91 98 56


測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


19.寫一程式計算克羅內克乘積。

說明

給定任兩個矩陣 A 和 B,我們可以得到兩個矩陣的直積,或稱為克羅內克乘積 A B ,其定義如下:



當 A 是一 m × n 矩陣和 B 是一 p × q 矩陣時, A B 會是一 mp × nq 矩陣,而且此一乘積也是不可交換的。

輸出
1.第一列輸入 A 矩陣維度 (m n)
2.第二列以後輸入 m 列,每一列均有 n 個資料(以空格隔開)。
3.第 m+2 列輸入 B 矩陣維度 (p q)
4.第 m+3 列以後輸入 p 列,每一列均有 q 個資料(以空格隔開)。
5. 1≤m、n、p、q≤10。-106<陣列內的數值<106

輸出
AB兩矩陣之克羅內克乘積

假設您的 A B 結果是放在 c 陣列,則下列是矩陣輸出的範例程式,可複製至您的程式中使。
for(im=0,mp=m*p;im<mp;im++) {
    for(in=0,nq=n*q;in<nq;in++)
        printf(" %lld ",c[im][in]);
    printf("\n");
}
【範例】
輸入
2 2
1 2
3 4
2 2
5 6
7 8

輸出
5 6 10 12
7 8 14 16
15 18 20 24
21 24 28 32




【範例】
輸入
2 3
10 20 30
40 50 60
4 2
11 12
21 22
31 32
41 42

輸出
110 120 220 240 330 360
210 220 420 440 630 660
310 320 620 640 930 960
410 420 820 840 1230 1260
440 480 550 600 660 720
840 880 1050 1100 1260 1320
1240 1280 1550 1600 1860 1920
1640 1680 2050 2100 2460 2520



測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答


20.寫一程式計算矩陣運算。

說明
給定任一個矩陣 A 及四個運算子(FH、FV、TL、TR)其定義如下:
假設

水平翻轉

垂直翻轉

左旋轉

右旋轉

輸入
1.第 1 列有三個自然數 r (A的總列數),c (A的總行數),t (操作 A 的運算子總數量)。(1≤r、c≤100,1≤t≤105)
2.第 2 列開始,總共有 r 列,每一列含有 c 個自然數 (範圍 0~9),每一個數字已空格隔開 。
3.第 r+2 列有 t 個 (0~3) 的整數,其中 0 表示 FH 運算、1 表示 VH 運算、2 表示 TL 運算、3 表示 TR 運算

輸出
1.第一列輸入 A 矩陣經過運算後的新的 r 與 c。(以空格隔開)
2.第二列以後為新的 A 矩陣資料,共 r 列,每一列有 c 個資料。(以空格隔開)

A 矩陣的輸出方式,下列是範例程式,可複製至您的程式中使用。
for(i=0; i<r; i++) {
    for(j=0; j<c ;c++)
        printf(" %d ",a[i][j]);
    printf("\n");
}

【範例】
輸入
2 3 0
1 2 3
4 5 6
133

輸出
2 3
4 5 6
1 2 3

測式文字檔1測式文字檔2測式文字檔2之解答
程式讀檔方式解答
程式陣列設定方式解答
程式解答