普考申論題
114年
[資訊處理] 程式設計概要
第 三 題
📖 題組:
依據以下 C#程式碼,回答下列問題: 1 using System; 2 namespace CSP4 3 { 4 class Program 5 { 6 static bool CSP4_1(int x) 7 { 8 if (x < 0) return false; 9 int L = 0, R = x; 10 while (L <= R) 11 { 12 int M = L + (R - L) / 2; 13 long S = (long)M * M; 14 if (S == x) return true; 15 else if (S < x) L = M + 1; 16 else R = M - 1; 17 } 18 return false; 19 } 20 static long CSP4_2(int n) 21 { 22 if (n <= 1) return n; 23 long a = 0, b = 1; 24 for (int i = 2; i <= n; i++) 25 { 26 long temp = a + b; 27 a = b; 28 b = temp; 29 } 30 return b; 31 } 32 static void Main() 33 { 34 int[] arrays = { 9, 10, -4 }; 35 foreach (var n in arrays) 36 { 37 Console.WriteLine($"{n} is CSP4_1? {CSP4_1(n)}"); 38 Console.WriteLine($"CSP4_2({n}) = {CSP4_2(n)}"); 39 } 40 } 41 } 42 }
依據以下 C#程式碼,回答下列問題: 1 using System; 2 namespace CSP4 3 { 4 class Program 5 { 6 static bool CSP4_1(int x) 7 { 8 if (x < 0) return false; 9 int L = 0, R = x; 10 while (L <= R) 11 { 12 int M = L + (R - L) / 2; 13 long S = (long)M * M; 14 if (S == x) return true; 15 else if (S < x) L = M + 1; 16 else R = M - 1; 17 } 18 return false; 19 } 20 static long CSP4_2(int n) 21 { 22 if (n <= 1) return n; 23 long a = 0, b = 1; 24 for (int i = 2; i <= n; i++) 25 { 26 long temp = a + b; 27 a = b; 28 b = temp; 29 } 30 return b; 31 } 32 static void Main() 33 { 34 int[] arrays = { 9, 10, -4 }; 35 foreach (var n in arrays) 36 { 37 Console.WriteLine($"{n} is CSP4_1? {CSP4_1(n)}"); 38 Console.WriteLine($"CSP4_2({n}) = {CSP4_2(n)}"); 39 } 40 } 41 } 42 }
📝 此題為申論題,共 3 小題
小題 (三)
此程式輸出結果為何?(8 分)
思路引導 VIP
看到此題應先獨立分析 CSP4_1 與 CSP4_2 兩個函式的運作邏輯(分別為判斷完全平方數的二分搜尋法、計算費波那契數列的迭代法)。接著將陣列 {9, 10, -4} 依序代入手動追蹤,並特別注意 C# 中布林值輸出為字串時首字為大寫的特性(True / False)。
小題 (一)
6~19 行程式碼功能(9 分)
思路引導 VIP
看到 L、R 變數與 while (L <= R) 搭配中點 M 的結構,應立刻聯想到「二元搜尋法 (Binary Search)」。接著觀察核心判斷式 S = M * M 與 x 的比較,即可推敲出此函式旨在尋找某整數的平方是否等於 x,亦即判斷 x 是否為完全平方數。
小題 (二)
20~31 行程式碼功能(8 分)
思路引導 VIP
先觀察迴圈內的變數替換邏輯:temp = a + b; a = b; b = temp;,這是典型的「將前兩項相加產生下一項」的特徵。接著結合初始條件 a = 0, b = 1,即可輕易辨識出此為計算費氏數列(Fibonacci sequence)的迭代解法。