首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 流程控制綜合實戰:最大公約數與百元百雞問題

     編輯:Java 相關知識

流程控制學習的核心:從語法到邏輯思維

許多初學者只重語法輕邏輯。實則流程控制是「將解題步驟用程式語言描述」的過程。遇到問題,先思考數學/邏輯步驟,再落地為代碼。同一問題可有多種邏輯,需發散思維、多角度嘗試。

案例一:最大公約數(GCD)

問題:求兩自然數最大公約數。如 6(1,2,3,6) 與 9(1,3,9) 的最大公約數為 3。

解法一:正向遍歷,記錄最後一個公約數

int n = 6, m = 9, result = 1;
for (int i = 1; i <= n; i++) {
    if (n % i == 0 && m % i == 0) {
        result = i;  // 不斷更新,最終為最大值
    }
}
System.out.println(result);

解法二:逆向遍歷,首個公約數即為最大(更高效)

int n = 6, m = 9;
int result = (n > m) ? m : n;  // 從較小數開始遞減
for (int i = result; i >= 1; i--) {
    if (n % i == 0 && m % i == 0) {
        result = i;
        break;  // 找到即跳出
    }
}
System.out.println(result);

同理可推導最小公倍數(LCM)邏輯。

案例二:百元百雞問題

問題:母雞 3 元、公雞 4 元、小雞 0.5 元。100 元買 100 隻雞,各買幾隻?(各類數量可為 0)

解法一:三層巢狀迴舉窮舉(結構清晰但效能低)

for (int i = 0; i <= 100; i++) {      // 母雞
    for (int j = 0; j <= 100; j++) {  // 公雞
        for (int k = 0; k <= 100; k++) {  // 小雞
            if (i + j + k == 100 && i*3 + j*4 + k*0.5 == 100) {
                System.out.println("母雞:" + i + " 公雞:" + j + " 小雞:" + k);
            }
        }
    }
}

總計 101³ ≈ 103 萬次迭代,明顯冗餘。

解法二:數學約束優化,消除第三層迴圈

觀察:母雞最多 33 隻(100/3),公雞最多 25 隻(100/4),小雞數量 = 100 - 母雞 - 公雞。

for (int i = 0; i <= 33; i++) {       // 母雞 0~33
    for (int j = 0; j <= 25; j++) {   // 公雞 0~25
        int k = 100 - i - j;          // 小雞數量直接推導
        if (i*3 + j*4 + k*0.5 == 100) {
            System.out.println("母雞:" + i + " 公雞:" + j + " 小雞:" + k);
        }
    }
}

迭代次數驟降至 34×26 = 884 次,效能提升三個數量級。可再進一步優化(如利用模運算預判),此處不贅述。

總結

解題關鍵:① 透徹理解問題 ② 建立數學模型 ③ 選擇恰當迴圈結構 ④ 持續優化邏輯。這才是流程控制學習的真諦。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved