有一大勺(容量 11 兩)和一小勺(容量 7 兩),目標是量出恰好 2 兩水。只能通過裝滿、倒水、倒回等操作,求最少操作次數及過程。
模擬倒水過程:每次將小勺裝滿倒入大勺,若大勺溢出,則計算小勺剩餘水量,將大勺倒空後把小勺剩餘水倒入大勺,繼續循環直到小勺剩餘 2 兩。
public class SpoonWater {
public static void main(String[] args) {
int cbig = 0; // 大勺當前水量
int clit = 0; // 小勺當前水量
int count = 0; // 操作次數
while (clit != 2) {
count++;
clit = 7; // 小勺裝滿
System.out.println("把小勺裝滿倒入大勺");
if (cbig + 7 >= 11) { // 大勺會溢出
clit = 7 - (11 - cbig); // 小勺剩餘水量
System.out.println("小勺剩 " + clit + " 兩");
System.out.println("大勺滿了,倒回去,把小勺剩下的 " + clit + " 兩倒入大勺");
cbig = clit; // 大勺現在裝的是小勺剩下的水
} else { // 大勺未滿
System.out.println("小勺全部倒入大勺,小勺空了");
System.out.println("大勺現有 " + cbig + " 兩");
cbig = cbig + 7;
}
}
System.out.println("總操作次數: " + count);
}
}
程序會逐步輸出每一步操作,最終輸出達到目標所需的總次數。這是一個經典的「水壺問題」變體,通過模擬法可直觀求解。