猴子分桃

来源:互联网 发布:淘宝店铺怎么引流量 编辑:程序博客网 时间:2024/04/30 14:06

题目:

五只猴子分一堆桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;......其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?


分析:

设第一只到第五只猴子分的每个堆的大小分别为a, b, c, d, e。那么满足如下的关系:

4*a = 5*b+1  。。。。(1)//第一只猴子走后剩下的桃子数为4*a; 第二只猴子将这些桃分成5堆,每堆大小为b (以下关系式类似)
4*b = 5*c+1  。。。。(2)
4*c = 5*d+1  。。。。(3)
4*d = 5*e+1  。。。。(4) //第五只猴子在第四只猴子走后的分法是5*e+1

消除中间变量,只保留a和e,得到关系式:

4^4*a=5^4*e + 369

即256*a = 625*e + 369    。。。。(5)

总的桃子数是S=5*a+1

要求S的最小值,相当于求a的最小值,也就是相当于求e的最小值,所以只需要在式(5)中将正整数e从初始值1开始循环,满足a也是正整数的结果就是S的最小值。

注:如果仅仅满足(5)式,并不能完全保证上面(1)到(4)式的成立,因此可以将计算出的a依次代入(1)到(4)式检验是否正确(这里的代码中没有做校验)。


代码:

public class MonkeyPeaches {public static void main(String[] args) {//4^4.x=5^4.y + 369//or: 256x = 625y + 369int sum = 625+369;while(true){int r = sum%256;if(r==0){int total = sum/256 * 5 + 1;System.out.format("total peaches:%d%n",total);break;}sum+=625;}}}

输出:

total peaches:3121


原创粉丝点击