发布日期:2025-07-17 14:47点击次数:184
案例解析
鸡兔同笼求解
《孙子算经》是中国古代重要的数学著作,成书于南北朝时期,其中就记载了一个有趣的问题:鸡和兔在同一个笼子里,鸡和兔共有n条腿, m个头,问鸡和兔各有多少只?编写一个程序实现鸡兔同笼问题。
# 源文件保存为“ChickenRabbitCage.java”import java.util.Scanner;publicclassChickenRabbitCage {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入头的总数:");intheads= scanner.nextInt(); System.out.print("请输入腿的总数:");intlegs= scanner.nextInt();// 计算兔子的数量:(腿数 - 2*头数)/2intrabbits= (legs - 2 * heads) / 2;intchickens= heads - rabbits;// 验证结果是否合理if(rabbits >= && chickens >= && (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;publicclassEnumerationSolution {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入头的总数:");intheads= scanner.nextInt(); System.out.print("请输入腿的总数:");intlegs= scanner.nextInt();booleanfound=false;for(intrabbits=; rabbits <= heads; rabbits++) {intchickens= 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;publicclassThreeAnimals {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in); System.out.print("请输入头的总数:");intheads= scanner.nextInt(); System.out.print("请输入腿的总数:");intlegs= scanner.nextInt(); System.out.print("请输入鸭子的数量(已知):");intducks= scanner.nextInt();intremainingHeads= heads - ducks;intremainingLegs= legs - 2 * ducks;if(remainingHeads <