问题描述:
5 只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
第 1 只猴子醒来,把香蕉均分成 5 堆,还剩下 1 个,就吃掉并把自己的一份藏起来继续睡觉。
第 2 只猴子醒来,把香蕉均分成 5 堆,还剩下 2 个,就吃掉并把自己的一份藏起来继续睡觉。
第 3 只猴子醒来,把香蕉均分成 5 堆,还剩下 3 个,就吃掉并把自己的一份藏起来继续睡觉。
第 4 只猴子醒来,把香蕉均分成 5 堆,还剩下 4 个,就吃掉并把自己的一份藏起来继续睡觉。
第 5 猴子醒来,重新把香蕉均分成 5 堆,哈哈,正好不剩!
请计算一开始最少有多少个香蕉。
思路分析:
通过循环不断尝试不同的香蕉数量,每次计算猴子们分香蕉后剩下的数量是否符合题目描述的规则。具体步骤如下:
- 初始化香蕉数量为0;
- 进入一个无限循环;
- 计算每只猴子拿走一份后剩下的香蕉数量;
- 检查当前香蕉数量是否符合猴子们分香蕉的规则;
- 如果符合条件,跳出循环;
- 否则尝试下一个香蕉数量;
- 输出符合条件的最小香蕉数量。
代码实现:
public class Main {
public static void main(String[] args) {
int bananas = 0; // 初始香蕉数量
while (true) {
// 计算每只猴子拿走一份后剩下的香蕉数量
int a = (bananas - 1) / 5 * 4;
int b = (a - 2) / 5 * 4;
int c = (b - 3) / 5 * 4;
int d = (c - 4) / 5 * 4;
// 检查是否符合猴子们分香蕉的规则
if (bananas % 5 == 1 && a % 5 == 2 && b % 5 == 3 && c % 5 == 4 && d % 5 == 0 && d > 0) {
break; // 找到符合条件的香蕉数量,跳出循环
}
bananas++; // 尝试下一个香蕉数量
}
System.out.println("一开始最少有 " + bananas + " 个香蕉");
}
}