猴子分桃

来源:互联网 发布:罗素兰挂号 知乎 编辑:程序博客网 时间:2024/04/30 09:36

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

解答如下:

第一只猴子拿走的桃子数(包括吃掉的一个):a=(x+4)/5,剩余的桃子数:A=x-a=x-(x+4)/5=4(x-1)/5

第二只猴子拿走的桃子数:b=(A+4)/5=4(x+4)/25,剩余的桃子数:B=A-b=4(x-1)/5-4(x+4)/25=4(4x-9)/25

第三只猴子拿走的桃子数:c=(B+4)/5=16(x+4)/125,剩余的桃子数:C=B-c=4(16x-61)/125

第四只猴子拿走的桃子数:d=(C+4)/5=64(x+4)/625,剩余的桃子数:D=C-d=4(64x-369)/625

第五只猴子拿走的桃子数:e=(D+4)/5=256(x+4)/3125,剩余的桃子数:E=D-e=4(256x-2101)/3125

而此问题是一个实际问题,因此每只猴子拿走的桃子数应为整数。因此得到(x+4)至少应为3125,x=3121.

拓展问题:假设有n只猴子分桃,第一只猴子把桃分成了相等的n堆,,多出一只,于是,它吃掉了一个,拿走了一堆;第二只猴子把剩下的桃子合在一起,分成相等的n堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;.....其他几只猴子也都是 这样分的。

第一只猴子拿走的桃子数(包括吃掉的一个):a1=(x+n-1)/n

第二只猴子拿走的桃子数:a2=(x-a1+n-1)/n=(n-1)(x+n-1)/n^2

第三只猴子拿走的桃子数:a3=(x-a1-a2+n-1)/n=(n-1)^2*(x+n-1)/n^3

第四只猴子拿走的桃子数:a4=(x-a1-a2-a3+n-1)/n=(n-1)^3*(x+n-1)/n^4

第五只猴子拿走的桃子数:a5=(x-a1-a2-a3-a4+n-1)/n=(n-1)^4*(x+n-1)/n^5

以此类推,可得到第i只猴子拿走的桃子数:ai=(n-1)^(i-1)*(x+n-1)/n^i

第n只猴子拿走的桃子数:an=(n-1)^(n-1)*(x+n-1)/n^n

考虑一般情形,(x+n-1)应为n^n的倍数,因此(x+n-1)至少为n^n,则原来这堆桃子的数目为x=n^n-n+1.

public class MonkeyDemo {public static void main(String[] args) {int n=5;//猴子的数目double x=Math.pow(n, n)-n+1;//桃子的数量System.out.println("原来的数目:"+(int)x);double[] a=new double[n];double sum=0;for(int i=1;i<=n;i++){a[i-1]=Math.pow(n-1, i-1)*(x+n-1)/Math.pow(n, i);sum+=a[i-1];System.out.println("第"+i+"只猴子拿走的桃子数目:"+(int)a[i-1]+" 剩余桃子数目:"+(int)(x-sum));}}}



0 0
原创粉丝点击