112 公務人員升官等薦任 統計 資料處理 考古題詳解

112 年・公務人員升官等・薦任・統計
試題代碼 資料處理

第 一 題20 分

請寫一個非遞迴呼叫的程式,輸出一個正整數是由那些最小因子(質數)的乘積所構成。

例如,120120 是由 2×2×2×3×52 \times 2 \times 2 \times 3 \times 5 這些質數所構成。程式輸入 120120,然後程式輸出 2×2×2×3×52 \times 2 \times 2 \times 3 \times 5。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查質因數分解與迴圈控制。依算術基本定理,每個大於 11 的整數都能唯一分解為質數的乘積。

使用試除法:由最小質數 22 開始,逐一檢查目前數值是否能被試除數整除;若可以,就輸出該因數並將目前數值除以它。持續除到不能整除,再檢查下一個試除數。

題目要求非遞迴呼叫,因此以迴圈完成,不使用函式遞迴。

解題方法

當目前數值 nn 可被試除數 dd 整除時,輸出 dd,並令 n←n/dn \leftarrow n/d。試除數保持不變,因為同一質數可能重複出現;不能整除時,才令 d←d+1d \leftarrow d+1。

輸入 n
設定 d = 2,first = true

當 n > 1:
 如果 n 能被 d 整除:
 如果 first 為 false,輸出「 × 」
 輸出 d
 設定 first = false
 n = n / d
 否則:
 d = d + 1

以 120120 為例:

目前的 nn試除數 dd動作
12012022整除,輸出 22,n←60n \leftarrow 60
606022整除,輸出 22,n←30n \leftarrow 30
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二 題20 分

假設一個 CPU 要處理以下 4 個程序(Process)。

程序執行時間優先權進入系統的順序
P1231
P2312
P3123
P4444

請針對先進先出(First Come First Served)及巡迴型(Round-Robin)兩種排序方法分別計算:

(一)CPU 執行程序的順序為何?需以甘特圖方式表示結果。

(二)每一個程序的回轉時間(Turnaround Time)各自為何?

(三)每一個程序的等候時間各別為何?

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考作業系統的 CPU 排程,需依排程規則排列程序,並計算:

  • 回轉時間:程序從進入系統到完成所經過的時間。 回轉時間=完成時間−進入時間\text{回轉時間}=\text{完成時間}-\text{進入時間}
  • 等候時間:程序在就緒佇列中等待 CPU 的總時間。若所有程序於時間 00 一起進入,且沒有 I/O 或其他阻塞: 等候時間=回轉時間−執行時間\text{等候時間}=\text{回轉時間}-\text{執行時間}

題目只給「進入系統的順序」,沒有提供各程序實際進入時間,因此按常見排程題假設:四個程序均於時間 00 到達,並以表列順序作為先後次序。優先權欄不影響本題的 FCFS 與 Round-Robin 排程。

解題方法

(一)先進先出 FCFS

FCFS 依到達順序執行,每個程序完成後才輪到下一個。依表列順序為 P1、P2、P3、P4。累加執行時間,得到各程序的完成時間:

  • P1:0+2=20+2=2
  • P2:2+3=52+3=5
  • P3:5+1=65+1=6
  • P4:6+4=106+4=10

甘特圖:

時間 0 2 5 6 10
 | P1 | P2 | P3 | P4 |

完成時間與回轉時間如下;因各程序均於時間 00 到達,回轉時間等於完成時間。

程序執行時間完成時間回轉時間等候時間
P12222−2=02-2=0
P23555−3=25-3=2
P31666−1=56-1=5
P44101010−4=610-4=6

(二)巡迴型 Round-Robin

Round-Robin 讓程序依就緒佇列順序輪流使用 CPU,每次最多執行一個時間片;未完成者回到佇列尾端。題目未指定時間片長度,因此採用常見假設:時間片長度為 1 個時間單位。

初始佇列為 P1、P2、P3、P4。逐輪執行:

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題20 分

漢明碼檢查(Hamming Code Check)的主要精神是利用數個加在特定位址的額外資料位元(即漢明碼),若資料在傳輸的過程中產生一個位元的錯誤時,則可利用漢明碼檢查法更正此位元之錯誤。

假設欲傳送的資料為 10101010011010101001(長度為 10 個位元),請問加上漢明碼後的資料訊息(長度為 14 個位元)為何?

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

漢明碼在資料位元中插入檢查位元,以檢查並更正單一位元錯誤。檢查位元放在位置為 22 的次方處,也就是第 1、2、4、8、…1、2、4、8、\ldots 位;其餘位置放置原始資料。

本題資料長度為 m=10m=10,檢查位元數 rr 須滿足:

2r≥m+r+12^r \geq m+r+1

取 r=4r=4 時,24=16≥10+4+1=152^4=16 \geq 10+4+1=15,因此總長度為 10+4=1410+4=14 位元,符合題目設定。

解題方法

位置由左至右編為第 11 至第 1414 位。檢查位元放在第 1、2、4、81、2、4、8 位,其餘位置依序填入資料 10101010011010101001:

位置1234567891011121314
類型P1P_1P2P_2資料P4P_4資料資料資料P8P_8資料資料資料資料資料資料
位元P1P_1P2P_21P4P_4010P8P_8101001
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題40 分

以下的關聯式資料庫包含 4 張表格。請利用 SQL 指令回答以下的問題(每小題 10 分,共 40 分):

employee(employee-name, street, city)

works(employee-name, company-name, salary)

company(company-name, city)

manages(employee-name, manager-name)

(一)請找出在 First Bank Corporation 這家公司工作,而且薪資高於 1 萬的員工姓名和居住的 street 及 city。

(二)請找出和他的主管住在相同 city 和 street 的員工姓名。

(三)請找出員工最多的公司。

(四)請找出薪資高於他工作的公司員工平均薪資的員工。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查關聯式資料庫查詢,包括資料表連接(JOIN)、條件篩選(WHERE)、彙總函數(COUNT、AVG)、分組(GROUP BY),以及子查詢。題目未提供主鍵、外鍵與重複資料規則,以下依一般關聯式資料庫設計,假設各表欄位名稱如題示,且 employee-name 可識別員工。

解題方法與 SQL

(一)找出在 First Bank Corporation 工作且薪資高於 1 萬的員工姓名及居住地址。

員工居住資料在 employee,工作公司與薪資在 works,因此依 employee-name 連接兩表,再篩選公司名稱與薪資。

SELECT e.employee-name, e.street, e.city
FROM employee AS e
JOIN works AS w
 ON e.employee-name = w.employee-name
WHERE w.company-name = 'First Bank Corporation'
 AND w.salary > 10000;

(二)找出與主管住在相同 city 和 street 的員工姓名。

先從 manages 取得員工與主管姓名,再將 employee 分別連接兩次:一次取得員工住址,另一次取得主管住址。以相同的 street 與 city 作為條件。

SELECT e.employee-name
FROM manages AS m
JOIN employee AS e
 ON m.employee-name = e.employee-name
JOIN employee AS mgr
 ON m.manager-name = mgr.employee-name
WHERE e.street = mgr.street
 AND e.city = mgr.city;

同一張 employee 表在查詢中扮演兩種角色,因此以 e 和 mgr 作為別名區分員工與主管的資料。

(三)找出員工最多的公司。

先依公司分組,再計算每家公司在 works 中的員工筆數;將筆數等於最高筆數的公司列出。以下寫法能保留並列第一的公司。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題