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

Java 流程控制經典案例:喝汽水與水仙花數問題詳解

     編輯:Java 相關知識

經典遞推問題:喝汽水

問題:1000 瓶汽水,喝完得 1 空瓶,3 空瓶換 1 瓶新汽水。問總共能喝幾瓶?最後剩幾個空瓶?

解法一:逐瓶模擬(直觀但迴圈次數多)

int num = 1000;      // 汽水數量
int drinkNum = 0;    // 已喝總數
int emptyNum = 0;    // 空瓶數量

while (num > 0) {
    num--;           // 喝一瓶
    emptyNum++;
    drinkNum++;
    if (emptyNum == 3) {  // 湊夠 3 個換新瓶
        num++;
        emptyNum = 0;
    }
}
System.out.println("總共喝掉瓶數:" + drinkNum);  // 1499
System.out.println("剩余空瓶子數:" + emptyNum);  // 2

解法二:批次處理(高效,邏輯更清晰)

int num = 1000;
int drinkNum = 0;
int emptyNum = 0;

while (num > 0) {
    drinkNum += num;           // 一次喝光所有汽水
    emptyNum += num;           // 獲得等量空瓶
    num = emptyNum / 3;        // 整數除法:能換多少新瓶
    emptyNum -= num * 3;       // 扣除換瓶用掉的空瓶
}
System.out.println("總共喝掉瓶數:" + drinkNum);  // 1499
System.out.println("剩余空瓶子數:" + emptyNum);  // 2

核心差異:解法二利用整數除法特性,將「喝完→換瓶」作為一個批次迴圈,大幅減少迭代次數。

數字拆分經典:水仙花數

定義:三位數中,各位數字立方和等於自身的數(如 370 = 3³+7³+0³)。

關鍵技巧:數字拆分——取個位、十位、百位。

for (int i = 100; i < 1000; i++) {
    int a = i % 10;        // 個位
    int b = (i / 10) % 10; // 十位
    int c = i / 100;       // 百位
    if (a*a*a + b*b*b + c*c*c == i) {
        System.out.println(i);
    }
}

輸出結果:153、370、371、407。

注意:迴圈變數 i 勿在迴圈體內修改,否則導致死迴圈。

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