第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份;第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份;第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
结果:最少3121个桃子。
主要问题在于: 第五只猴子手上此时拿到的最少的桃子数量如何确定;
思路:
1 这里存在一个前提,第五只猴子手里所有桃子,以此向前推,要求前面的桃子一定要是整数,这样看很明显第五只猴子手里6个桃子不合理;
2 每一只猴子手上桃子总数是前一只猴子分好五份中的其中四分,也就是仅仅占4/5, 同时前一只还扔掉一个桃子;
3 定义一个初始值,定义为最小一份的桃子数 x ;
4 题上仅五只猴子,所以需要向前推四次,并且每次前推获得的数值一定为整数(这很重要);
5 每次前推为整数,就将前一只猴子所分的一份赋值给 x ;
6 循环出来判断,是否成功赋值 4 次.
不是: 就将sum++,重新循环;
是,此时赋值得到的 x 值就是最初的桃子中的一份,所以 x * 5 + 1 即可;
7 只有当前推四次均为整数时,那么得到的最终数值,即为结果.
代码如下:
public int getCount() {
int sum = 1, x;
while (true) {
int i = 0;
x = sum;
for (i = 0; i < 4; i++) {
if ((x * 5 + 1) % 4 == 0) {
x = (x * 5 + 1) / 4;
} else {
break;
}
}
if (i != 4) {
sum++;
} else {
return (x * 5 + 1);
}
}
}
public static void main(String[] args) {
System.out.println("海滩上原来的桃子数量为: " + new InitPeach().getCount());
}