112 公務人員升官等薦任 統計 資料處理 考古題詳解
第 一 題20 分
請寫一個非遞迴呼叫的程式,輸出一個正整數是由那些最小因子(質數)的乘積所構成。
例如, 是由 這些質數所構成。程式輸入 ,然後程式輸出 。
登入後即可作答並保存紀錄。
核心觀念
本題考查質因數分解與迴圈控制。依算術基本定理,每個大於 的整數都能唯一分解為質數的乘積。
使用試除法:由最小質數 開始,逐一檢查目前數值是否能被試除數整除;若可以,就輸出該因數並將目前數值除以它。持續除到不能整除,再檢查下一個試除數。
題目要求非遞迴呼叫,因此以迴圈完成,不使用函式遞迴。
解題方法
當目前數值 可被試除數 整除時,輸出 ,並令 。試除數保持不變,因為同一質數可能重複出現;不能整除時,才令 。
輸入 n
設定 d = 2,first = true
當 n > 1:
如果 n 能被 d 整除:
如果 first 為 false,輸出「 × 」
輸出 d
設定 first = false
n = n / d
否則:
d = d + 1
以 為例:
| 目前的 | 試除數 | 動作 |
|---|---|---|
| 整除,輸出 , | ||
| 整除,輸出 , |
第 二 題20 分
假設一個 CPU 要處理以下 4 個程序(Process)。
| 程序 | 執行時間 | 優先權 | 進入系統的順序 |
|---|---|---|---|
| P1 | 2 | 3 | 1 |
| P2 | 3 | 1 | 2 |
| P3 | 1 | 2 | 3 |
| P4 | 4 | 4 | 4 |
請針對先進先出(First Come First Served)及巡迴型(Round-Robin)兩種排序方法分別計算:
(一)CPU 執行程序的順序為何?需以甘特圖方式表示結果。
(二)每一個程序的回轉時間(Turnaround Time)各自為何?
(三)每一個程序的等候時間各別為何?
登入後即可作答並保存紀錄。
核心觀念
本題考作業系統的 CPU 排程,需依排程規則排列程序,並計算:
- 回轉時間:程序從進入系統到完成所經過的時間。
- 等候時間:程序在就緒佇列中等待 CPU 的總時間。若所有程序於時間 一起進入,且沒有 I/O 或其他阻塞:
題目只給「進入系統的順序」,沒有提供各程序實際進入時間,因此按常見排程題假設:四個程序均於時間 到達,並以表列順序作為先後次序。優先權欄不影響本題的 FCFS 與 Round-Robin 排程。
解題方法
(一)先進先出 FCFS
FCFS 依到達順序執行,每個程序完成後才輪到下一個。依表列順序為 P1、P2、P3、P4。累加執行時間,得到各程序的完成時間:
- P1:
- P2:
- P3:
- P4:
甘特圖:
時間 0 2 5 6 10
| P1 | P2 | P3 | P4 |
完成時間與回轉時間如下;因各程序均於時間 到達,回轉時間等於完成時間。
| 程序 | 執行時間 | 完成時間 | 回轉時間 | 等候時間 |
|---|---|---|---|---|
| P1 | 2 | 2 | 2 | |
| P2 | 3 | 5 | 5 | |
| P3 | 1 | 6 | 6 | |
| P4 | 4 | 10 | 10 |
(二)巡迴型 Round-Robin
Round-Robin 讓程序依就緒佇列順序輪流使用 CPU,每次最多執行一個時間片;未完成者回到佇列尾端。題目未指定時間片長度,因此採用常見假設:時間片長度為 1 個時間單位。
初始佇列為 P1、P2、P3、P4。逐輪執行:
第 三 題20 分
漢明碼檢查(Hamming Code Check)的主要精神是利用數個加在特定位址的額外資料位元(即漢明碼),若資料在傳輸的過程中產生一個位元的錯誤時,則可利用漢明碼檢查法更正此位元之錯誤。
假設欲傳送的資料為 (長度為 10 個位元),請問加上漢明碼後的資料訊息(長度為 14 個位元)為何?
登入後即可作答並保存紀錄。
核心觀念
漢明碼在資料位元中插入檢查位元,以檢查並更正單一位元錯誤。檢查位元放在位置為 的次方處,也就是第 位;其餘位置放置原始資料。
本題資料長度為 ,檢查位元數 須滿足:
取 時,,因此總長度為 位元,符合題目設定。
解題方法
位置由左至右編為第 至第 位。檢查位元放在第 位,其餘位置依序填入資料 :
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 類型 | 資料 | 資料 | 資料 | 資料 | 資料 | 資料 | 資料 | 資料 | 資料 | 資料 | ||||
| 位元 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
第 四 題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 中的員工筆數;將筆數等於最高筆數的公司列出。以下寫法能保留並列第一的公司。