题目:公元五世纪,我国古代数学家张丘建在《算经》一书中提出了"百鸡问题":鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 现要求你打印出所有花一百元买一百只鸡的方式。 输入描述: 输入任何一个整数,即可运行程序。 输出描述: 输出有数行,每行三个整数,分别代表鸡翁,母鸡,鸡雏的数量。
输出示例: 题目中输入任意整数,比如 1
输出四组满足题意的方案:
0 25 75
4 18 78
8 11 81
12 4 84
public class Demo12 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
List<int[]> solutions = findHundredChickenCombinations();
for (int[] solution : solutions) {
System.out.println(solution[0] + " " + solution[1] + " " + solution[2]);
}
}
}
public static List<int[]> findHundredChickenCombinations() {
List<int[]> solutions = new ArrayList<>();
for (int roosters = 0; roosters <= 20; roosters++) { // 鸡翁最多为20只(因为5文一只,否则超过100文)
for (int hens = 0; hens <= 33; hens++) { // 鸡母最多为33只(因为3文一只,否则超过100文)
int remainingMoney = 100 - (roosters * 5 + hens * 3);
int remainingChicks = 100 - roosters - hens;
if (remainingMoney * 3 == remainingChicks) { // 检查剩余钱能否正好买完剩余的鸡雏
solutions.add(new int[]{roosters, hens, remainingChicks});
}
}
}
return solutions;
}
}
如果大家需要视频版本的讲解,欢迎关注我的B站: