案例解析
雞兔同籠求解
《孫子算經》是中國古代重要的數學著作,成書于南北朝時期,其中就記載了一個有趣的問題:雞和兔在同一個籠子里,雞和兔共有n條腿, m個頭,問雞和兔各有多少只?編寫一個程序實現雞兔同籠問題。
# 源文件保存為“ChickenRabbitCage.java”
import java.util.Scanner;public class ChickenRabbitCage {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請輸入頭的總數:");int heads = scanner.nextInt();System.out.print("請輸入腿的總數:");int legs = scanner.nextInt();// 計算兔子的數量:(腿數 - 2*頭數)/2int rabbits = (legs - 2 * heads) / 2;int chickens = heads - rabbits;// 驗證結果是否合理if(rabbits >= 0 && chickens >= 0 && (2*chickens + 4*rabbits) == legs) {System.out.println("雞有" + chickens + "只");System.out.println("兔有" + rabbits + "只");} else {System.out.println("無解,請檢查輸入數據是否合理");}scanner.close();}
}
運行示例:
輸入頭的總數10,腿的總數32
請輸入頭的總數:10
請輸入腿的總數:32
雞有4只
兔有6只
代碼解析:
- 使用Scanner獲取用戶輸入的頭和腿的數量
- 根據數學公式計算兔子的數量:rabbits = (legs - 2*heads)/2
- 雞的數量就是總頭數減去兔子的數量
- 驗證結果是否合理(非負數且腿數計算正確)
- 輸出結果或提示無解
枚舉法求解
# 源文件保存為“EnumerationSolution.java”
import java.util.Scanner;public class EnumerationSolution {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請輸入頭的總數:");int heads = scanner.nextInt();System.out.print("請輸入腿的總數:");int legs = scanner.nextInt();boolean found = false;for(int rabbits = 0; rabbits <= heads; rabbits++) {int chickens = heads - rabbits;if(2*chickens + 4*rabbits == legs) {System.out.println("雞有" + chickens + "只");System.out.println("兔有" + rabbits + "只");found = true;break;}}if(!found) {System.out.println("無解,請檢查輸入數據是否合理");}scanner.close();}
}
運行示例:
輸入頭的總數10,腿的總數32
請輸入頭的總數:10
請輸入腿的總數:32
雞有4只
兔有6只
代碼亮點:
- 使用枚舉法逐個嘗試可能的兔子數量
- 更直觀,不需要數學推導
- 適合理解問題本質
- 可以輕松擴展到更多動物的情況
三元組問題(雞兔鴨同籠)
# 源文件保存為“ThreeAnimals.java”
import java.util.Scanner;public class ThreeAnimals {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請輸入頭的總數:");int heads = scanner.nextInt();System.out.print("請輸入腿的總數:");int legs = scanner.nextInt();System.out.print("請輸入鴨子的數量(已知):");int ducks = scanner.nextInt();int remainingHeads = heads - ducks;int remainingLegs = legs - 2 * ducks;if(remainingHeads < 0 || remainingLegs < 0) {System.out.println("鴨子數量輸入不合理");return;}int rabbits = (remainingLegs - 2 * remainingHeads) / 2;int chickens = remainingHeads - rabbits;if(rabbits >= 0 && chickens >= 0 && (2*chickens + 4*rabbits + 2*ducks) == legs) {System.out.println("雞有" + chickens + "只");System.out.println("兔有" + rabbits + "只");System.out.println("鴨有" + ducks + "只");} else {System.out.println("無解,請檢查輸入數據是否合理");}scanner.close();}
}
運行結果
輸入頭的總數10,腿的總數32,鴨子數量3
請輸入頭的總數:12
請輸入腿的總數:32
請輸入鴨子的數量(已知):3
雞有5只
兔有4只
鴨有3只
代碼亮點:
- 擴展原問題,增加鴨子
- 展示了如何逐步解決更復雜的問題
- 需要先減去已知動物的影響
- 更貼近實際應用場景
操作練習題
蜘蛛螞蟻問題
要求:
- 籠子里有蜘蛛和螞蟻
- 蜘蛛8條腿,螞蟻6條腿
- 輸入頭和腿的總數
- 計算蜘蛛和螞蟻的數量
參考代碼:
# 源文件保存為“SpiderAnt.java”
import java.util.Scanner;public class SpiderAnt {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請輸入頭的總數:");int heads = scanner.nextInt();System.out.print("請輸入腿的總數:");int legs = scanner.nextInt();int spiders = (legs - 6 * heads) / 2;int ants = heads - spiders;if(spiders >= 0 && ants >= 0 && (8*spiders + 6*ants) == legs) {System.out.println("蜘蛛有" + spiders + "只");System.out.println("螞蟻有" + ants + "只");} else {System.out.println("無解,請檢查輸入數據是否合理");}scanner.close();}
}
運行結果
輸入頭的總數5,腿的總數34
請輸入頭的總數:5
請輸入腿的總數:34
蜘蛛有2只
螞蟻有3只
多解情況處理
要求:
- 籠子里有雞、兔和羊
- 雞2條腿,兔4條腿,羊4條腿
- 輸入頭和腿的總數
- 找出所有可能的動物組合
參考代碼:
# 源文件保存為“MultipleSolutions.java”
import java.util.Scanner;public class MultipleSolutions {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請輸入頭的總數:");int heads = scanner.nextInt();System.out.print("請輸入腿的總數:");int legs = scanner.nextInt();System.out.println("可能的組合:");boolean found = false;for(int sheep = 0; sheep <= heads; sheep++) {for(int rabbits = 0; rabbits <= heads - sheep; rabbits++) {int chickens = heads - sheep - rabbits;if(2*chickens + 4*rabbits + 4*sheep == legs) {System.out.printf("雞%d只,兔%d只,羊%d只\n", chickens, rabbits, sheep);found = true;}}}if(!found) {System.out.println("無解,請檢查輸入數據是否合理");}scanner.close();}
}
運行結果
輸入頭的總數8和腿的總數18
請輸入頭的總數:8
請輸入腿的總數:18
可能的組合:
雞7只,兔1只,羊0只
雞7只,兔0只,羊1只