猴子分桃

题目:

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


分析:

设第一只到第五只猴子分的每个堆的大小分别为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 + 369
		int 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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值