意昂体育

「Java案例」鸡兔同笼问题

发布日期: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 <

推荐资讯