問題: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 勿在迴圈體內修改,否則導致死迴圈。