地特三等申論題
111年
[資訊處理] 程式設計
第 一 題
📖 題組:
四、有關 Java 程式設計,回答下列問題:
四、有關 Java 程式設計,回答下列問題:
📝 此題為申論題,共 2 小題
小題 (一)
寫一找尋小於 10,000 的完美數(Perfect number)程式,所謂完美數是指:如果一個正整數等於它所有正因數的和,但不包括它自己,則此正整數被稱為完美數。例如,6 是第一個完美數,因為 6 = 3 + 2 + 1。接下來是 28 = 14 + 7 + 4 + 2 + 1。(11 分)
思路引導 VIP
看到這題應先確立「完美數」的計算邏輯:找出某數所有正因數(不含自身)並加總,再與原數比對。實作時可將「判斷完美數」抽離為獨立方法以提高可讀性,並注意因數尋找迴圈的終止條件設為 num / 2 甚至 Math.sqrt(num) 即可,藉此展現對效能優化的基本觀念。
小題 (二)
以下程式功能為何?當輸入 32,56,80 時,其輸出結果分別為多少?(16 分)
import java.util.Scanner;
public class LSE111_r4_2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("輸入一整數: ");
int value = input.nextInt();
String oS = "";
while (value != 0) {
int s = value % 8;
oS = s + oS;
value = value / 8;
}
System.out.println("輸出為: " + oS);
}
}
思路引導 VIP
首先觀察迴圈內的除以 8 和取 8 的餘數操作,可辨識出這是將十進位數值轉換為特定進位(此處為八進位)的標準演算法。接著透過逐步追蹤(Trace)迴圈中 value 和字串 oS 的變化,即可準確推導出各給定輸入值的輸出結果。