阿摩線上測驗 登入

申論題資訊

試卷:100年 - 100年專門職業及技術人員高等建築師、技師、第2次食品技師暨普通不動產經紀人、記帳士考高等_資訊技師#40649
科目:程式設計
年份:100年
排序:0

申論題內容

三、試寫一個完整的 Java 程式,計算一個 n 人房間中,任何兩個人都必須握手一次之總 握手次數。(20 分) 此程式有下列 2 個類別: HandShakes 類別:內有一個靜態方法 countHandShakes(),此方法會接受傳入之參數 numPeople(人數),然後以遞迴(recursive)方式計算總握手次數。 Demo 類別:內有一個靜態方法 main(),此方法會要求使用者輸入房間內的人數, 然後呼叫 countHandShakes(),以取得總握手次數,最後將結果輸出。注意:輸出或 輸入時需有適當的提示文字。

詳解 (共 1 筆)

詳解 提供者:hchungw
以下是一個Java程式的實現,該程式由兩個類組成:HandShakes類和Demo類。HandShakes類包含一個靜態方法countHandShakes,該方法使用遞歸方式計算在一個房間內n個人全部互相握手一次的總握手次數。Demo類包含main方法,用於從用戶那裏接收房間內人數的輸入,調用countHandShakes方法,並輸出總握手次數。
HandShakes 類
java
Copy code
public class HandShakes {
    // 靜態方法,使用遞歸計算總握手次數
    public static int countHandShakes(int numPeople) {
        if (numPeople <= 1) {
            // 如果房間內人數小於等於1,則不可能發生握手
            return 0;
        } else {
            // 否則,總握手次數等於當前人數減1(當前人與其他人握手)加上剩餘人數的握手次數
            return (numPeople - 1) + countHandShakes(numPeople - 1);
        }
    }
}
Demo 類
java
Copy code
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入房間內的人數:");
        int numPeople = scanner.nextInt();
        // 調用HandShakes類中的countHandShakes方法計算總握手次數
        int totalHandshakes = HandShakes.countHandShakes(numPeople);
        // 輸出結果
        System.out.println("總握手次數為:" + totalHandshakes);
    }
}
這個程式的邏輯很簡單。countHandShakes方法採用遞歸方式來計算總握手次數。基本思想是,每個人都需要與房間內的其他所有人握手一次。因此,如果有n個人在房間裏,那麼第n個人就需要和其他n-1個人握手。接下來,問題就變成了計算剩下的n-1個人之間的握手次數,這就是遞歸發生的地方。
程式啟動時,Demo類的main方法會提示用戶輸入房間內的人數,然後調用HandShakes.countHandShakes方法計算並返回總握手次數,最後將結果輸出到控制臺。