猴子分桃
来源:互联网 发布:罗素兰挂号 知乎 编辑:程序博客网 时间: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));}}}
- 猴子分桃
- 猴子分桃问题
- 猴子分桃问题
- 猴子分桃
- 猴子分桃
- 猴子分桃问题
- 猴子分桃问题
- 猴子分桃
- 猴子分桃
- 猴子分桃问题
- 猴子分桃
- 猴子分桃
- AOJ194 猴子分桃
- SDUT 猴子分桃
- 猴子分桃
- 猴子分桃
- 猴子分桃
- 猴子分桃
- Lecture3-3Learning with different input space
- 符号链接和硬链接的区别
- 字符串拆分
- SQL基础知识归纳总结
- OpenCV矩阵运算用例
- 猴子分桃
- 统计各种字符个数
- 使用xshell进行导出oracle的dmp文件,加查询条件
- 使用Libcef+Duilib创建自己的Chrome内核浏览器
- ZooKeeper 典型的应用场景
- MySQL:连接MyEcliose
- C++字符串string类常用操作详解(一)【初始化、遍历、连接】
- GCD的使用
- FFT的详细解释