114 國安局特考三等 資訊組(選試英文) 計算機概論 考古題詳解

114 年・國安局特考・三等・資訊組(選試英文)
試題代碼 計算機概論

第 一 題25 分

(一) 下列兩個 IP 位址以無類別域間路由(Classless Inter-Domain Routing)的方式切割子網路遮罩(subnet mask)位數均為 2727:

200.116.162.82/27200.116.162.82/27 與 200.116.162.114/27200.116.162.114/27 是否會是在同一個子網路內?請仔細說明理由。

如果是,則它們所在的子網路 IP 位址範圍是什麼?

如果在不同子網路,則它們各自所在的子網路 IP 位址範圍又各是什麼?(15 分)

(二) 假設有個雜湊函數(hash function),是將一個英文字,轉換成另外一個英文字。其計算過程如下:

先把英文字中的每個字母轉換成數字,把 aa 轉成 11、bb 轉成 22,依此類推,zz 轉成 2626。

接下來把所有數字相加,再除以 77,得到的餘數再加 11,之後再乘以 99,得到一個數字。

再將該數字倒過來寫,例如 2727 變成 7272、126126 變成 621621。

然後再把每位數字對應回英文字母,11 對應回 aa、22 對應回 bb,依此類推。

請問 fido、blank、good,哪幾個字經過上述雜湊函數計算後的字會是 cf?

請將計算過程詳細列出,以說明你的答案。(10 分)

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

這一題的完整詳解

(一)判斷兩個 IP 位址是否位於同一子網路

核心觀念

CIDR 前綴 /27 表示子網路遮罩前 27 個位元為 1,亦即子網路遮罩為 255.255.255.224。最後一個位元組的子網路區塊大小為 256−224=32256-224=32,所以每個子網路涵蓋 32 個連續位址。

解題方法

前 3 個位元組相同,都是 200.116.162,只需比較最後一個位元組分別落在哪個 32 位址區塊:

  • 82 落在 64–95 區間,因為 ⌊82/32⌋×32=64\lfloor 82/32\rfloor \times 32=64。
  • 114 落在 96–127 區間,因為 ⌊114/32⌋×32=96\lfloor 114/32\rfloor \times 32=96。

兩者的區塊不同,因此不在同一個子網路。

各子網路範圍如下:

  • 200.116.162.82/27 所在網段:網路位址 200.116.162.64,廣播位址 200.116.162.95,完整位址範圍為 200.116.162.64–200.116.162.95。可用主機位址為 200.116.162.65–200.116.162.94。
  • 200.116.162.114/27 所在網段:網路位址 200.116.162.96,廣播位址 200.116.162.127,完整位址範圍為 200.116.162.96–200.116.162.127。可用主機位址為 200.116.162.97–200.116.162.126。

解題技巧

/27 的區塊大小是 32,可直接列出最後一個位元組的網段起點:0、32、64、96、128、160、192、224。看各位址落在哪個區間,就能迅速判斷是否同網段。

🔒

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

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

免費註冊

第 二 題25 分

(一) 下列的函式是 C 語言的 function:

int xyz(int x, int y)\texttt{int xyz(int x, int y)} {\texttt{\{}   int i;\texttt{\ \ int i;}   for (i=x; i>=1; i--)\texttt{\ \ for (i=x; i>=1; i--)}     if (x%i==0 && y%i==0)\texttt{\ \ \ \ if (x\%i==0 \&\& y\%i==0)}       return i;\texttt{\ \ \ \ \ \ return i;} }\texttt{\}}

請問呼叫 xyz(15, 40)\texttt{xyz(15, 40)} 以及呼叫 xyz(xyz(42, 63), xyz(105, 60))\texttt{xyz(xyz(42, 63), xyz(105, 60))} 各會得到多少?(10 分)

(二) 假設已經有一個程式(或演算法)Find_Largest()\texttt{Find\_Largest()},可以從輸入的整數資料陣列(array)中,找出最大數值在這陣列的位置。

請利用這個 Find_Largest()\texttt{Find\_Largest()},寫出一個電腦程式(或演算法),可以找出輸入整數資料陣列中的中間數(median)。

假設所輸入的整數資料陣列,沒有重複的整數資料。

中間數的定義如下:

如果全部資料筆數是奇數,則這些資料中比這個中間數小的筆數,跟比這個中間數大的筆數,剛好一樣。

如果全部資料筆數是偶數,則這些資料中比這個中間數小的筆數,是比中間數大的筆數少 11。

你的程式或演算法,一定要用到 Find_Largest()\texttt{Find\_Largest()} 才行。(15 分)

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

這一題的完整詳解

(一) 函式 xyz 的回傳值

核心觀念

函式從 i=xi=x 開始遞減,遇到第一個同時整除 xx 與 yy 的數,就立即回傳。因此,xyz(x, y) 會回傳 xx 和 yy 的最大公因數。

解題方法

呼叫 xyz(15, 40) 時,ii 由 1515 遞減。最大的共同因數為 55:

gcd⁡(15,40)=5\gcd(15,40)=5

所以 xyz(15, 40) 回傳 55。

巢狀呼叫由內而外計算:

xyz(42, 63)=gcd⁡(42,63)=21,xyz(105, 60)=gcd⁡(105,60)=15.\begin{aligned} \texttt{xyz(42, 63)} &= \gcd(42,63)=21,\\ \texttt{xyz(105, 60)} &= \gcd(105,60)=15. \end{aligned}

因此外層呼叫為:

xyz(21, 15)=gcd⁡(21,15)=3\texttt{xyz(21, 15)}=\gcd(21,15)=3

解題技巧

函式從第一個引數開始往下搜尋,並在找到共同因數時立刻回傳;因此第一個找到的共同因數就是最大公因數。

(二) 使用 Find_Largest 找中間數

核心觀念

資料沒有重複時,將 nn 筆資料由小到大排列,中間數的位置(以 1 為起始)為:

k=⌈n2⌉k=\left\lceil\frac{n}{2}\right\rceil

若 nn 為奇數,該位置左右資料筆數相等;若 nn 為偶數,取較小的中間數,其左側資料比右側少 11,符合題目定義。Find_Largest 可反覆從尚未處理的資料中找出最大值,依序移至陣列尾端;完成 n−kn-k 次後,位置 kk 的資料即為所求。

🔒

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

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

免費註冊

第 三 題20 分

(一) 假設有一個二元搜尋樹(binary search tree),已知若用後序走訪(postorder)這個二元搜尋樹,得到的結果是:

1,4,8,7,3,10,16,15,91, 4, 8, 7, 3, 10, 16, 15, 9

請畫出這個二元搜尋樹。(15 分)

(二) 下列式子是用後序(postfix)表示式:

123+∗5+1\quad 2\quad 3\quad +\quad *\quad 5\quad +

請問若將它轉成前序(prefix)表示式會是如何?(10 分)

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

這一題的完整詳解

核心觀念

二元搜尋樹(Binary Search Tree, BST)中,每個節點的左子樹鍵值都小於該節點,右子樹鍵值都大於該節點。後序走訪的順序是:

左子樹→右子樹→根節點\text{左子樹}\rightarrow\text{右子樹}\rightarrow\text{根節點}

因此,後序序列的最後一個值是整棵樹的根;再依 BST 的大小關係,將根之前的序列分成左子樹與右子樹,並對兩邊遞迴處理。

解題方法

給定後序序列:

1, 4, 8, 7, 3, 10, 16, 15, 91,\ 4,\ 8,\ 7,\ 3,\ 10,\ 16,\ 15,\ 9

最後一個值 99 是根節點。根左側的值小於 99,構成左子樹後序序列:

1, 4, 8, 7, 31,\ 4,\ 8,\ 7,\ 3

大於 99 的值構成右子樹後序序列:

10, 16, 1510,\ 16,\ 15

左子樹: 序列最後一個值 33 是左子樹的根。小於 33 的 11 為其左子樹後序序列;大於 33 的 4,8,74,8,7 為其右子樹後序序列。

右子樹的根為 77;其左子樹序列為 44,右子樹序列為 88。因此,左子樹結構如下:

 3
 / \
 1 7
 / \
 4 8

右子樹: 序列最後一個值 1515 是右子樹的根。小於 1515 的 1010 為其左子樹,右子樹為空;1616 為其右子樹。因此結構如下:

 15
 / \
 10 16

合併左右子樹並接回根節點 99,得到:

 9
 / \
 3 15
 / \ / \
 1 7 10 16
 / \
 4 8

解題技巧

🔒

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

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

免費註冊

第 四 題25 分

(一) 只能利用基本的三種邏輯閘 AND、OR、NOT,設計出一個 11-bit 的二進位減法器電路。這個減法器有兩個 11-bit 的輸入 aa 與 bb,一個輸出 cc,且:

c=a−bc=a-b

其中,二進位的減法如下:

0−0=00-0=0 1−0=11-0=1 0−1=10-1=1 1−1=01-1=0

(10 分)

(二) 假設一個電腦的實體記憶體有 512 MB512\ \mathrm{MB},每個字(word)為 44 bytes,且每個分頁(page)大小為 16 KB16\ \mathrm{KB},總共有 1024×10241024\times1024 分頁。

那麼此電腦的邏輯位址(logical address)、實體位址(physical address)分別應是幾 bits?請詳細列計算過程。(15 分)

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

這一題的完整詳解

核心觀念

本題分別考查:

  1. 組合邏輯電路:依輸入與輸出關係列出真值表,再化簡布林函數,並以 AND、OR、NOT 閘實作。
  2. 位址位元數:位址所需位元數為可表示的位置總數取以 2 為底的對數。位元組定址時,位址涵蓋的單位是 byte;字(word)大小不會改變位址位元數。

(一)1-bit 二進位減法器

解題方法

依題目列出的四種輸入組合,整理真值表:

aabbc=a−bc=a-b
000
011
101
110

輸出 cc 在 aa 與 bb 不同時為 1,因此是互斥或(XOR)函數。只用 AND、OR、NOT 閘表示為:

c=(a‾∧b)∨(a∧b‾)c=(\overline{a}\land b)\lor(a\land\overline{b})

電路可分成兩條 AND 路徑:一條計算 a‾∧b\overline{a}\land b,另一條計算 a∧b‾a\land\overline{b},再將兩者的結果輸入 OR 閘。所需閘包含兩個 NOT、兩個 AND 與一個 OR。

解題技巧

逐列對照真值表即可驗算:a=ba=b 時輸出為 0;a≠ba\ne b 時輸出為 1。這也就是本題四種減法結果所呈現的規律。

(二)邏輯位址與實體位址

核心觀念與解題方法

每個位址可表示一個可定址單位。一般電腦採位元組定址,因此記憶體位址數由 byte 總數決定。

🔒

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

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

免費註冊

其他考古題

114 年國安局特考三等・其他類科的《計算機概論》