Java猴子分桃问题--三种算法
五猴分桃类型题简易通解公式及推导
“五猴分桃”类型题简易通解公式及推导“五猴分桃”的前身是“水手分椰子”。
这是一个非常有名的趣味数学难题,于1926年首先刊登在美国的邮报上。
剧说,最早是由伟大物理学家狄拉克提出来的,这一貌似简单的问题曾困扰住了他,为了获得简便的计算方法,他把问题提供给当时的一些数学家,但没有得到满意的结果。
1979年,“诺贝尔"物理学奖获得者李政道博士在“中国科技大学少年班”讲学时,特意提到此题;此后,研究该题的简易计算方法,迅速风靡国内。
曾对“五水手分椰子”的广泛流传, 起过重要作用的, 著名现代数理逻辑学家怀德海, 曾用高阶差分方程理论的通解和特解的关系,对“水手分椰子”一题, 给出过一个答案为(-4)的巧妙特解。
近十多年来,在后来者的不断努力下,一些比较简便的方法也逐步涌现。
但严格的来说:目前所取得的成果,其本上还是仅限于“五猴分桃”这样一个具体的题目上,离全面彻底而又简捷地求解所有这种类型的题目,还存在着一定的距离。
本人曾于1979年, 在月刊《中国青年》看到(五猴分桃)一题, 并用不定方程求得其解。
当时,本人觉得就题论题意义己不大。
于是通过五、六天的努力,终于演算出,能求解所有这种类题型的完整、简捷的“通解公式”(影响答案的各困素可以任意取值, 并可非常简易的求解,详见下面的计算公式和例题):但是,由于当时自己在乡下,信息闭塞,不知道这个“通解公式”有何意义。
一幌三十多年又过去了,前段时间, 因经常上上网,于是惊呀发现:寻找“五猴分桃”类型题的简易计算方法,竟是一个具有深刻背景的,已研论了二、三十年的热门数学话题;而且至今仍未找到完美解决方法。
于是自己边回想、边演算,终于又重新推导出了“五猴分桃”类型题的简易“通解公式”。
现将其发表如下,与大家共同分享。
“水手分椰子”类型题完整而又简易的通解公式:y=a n-db/cy-被分的某东西的总个数,a-每次分的总份数(一般情况下,是总人数),n-总共分的次数,c-分a份后拿走的份数,b-每次分a份后的余数,d-每次分a份拿走c份后剩下再分的份数,注;当b/c不为自然数时,则此时该题无解, 也即y无解。
猴子分桃问题
实验报告
感觉这个程序边界要考虑的很好不然会出错。
但是改程序对于较大的数,运行时间比较长,这个还有待优化该程序。
实验报告说明
实验名称要用最简练的语言反映实验的内容。
如验证某程序、定律、算法,可写成“验证×××”;分析×××。
实验目的目的要明确,要抓住重点,可以从理论和实践两个方面考虑。
在理论上,验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。
一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。
实验环境实验用的软硬件环境(配置)。
实验内容(算法、程序、步骤和方法)这是实验报告极其重要的内容。
这部分要写明依据何种原理、定律算法、或操作方法进行实验,要写明经过哪几个步骤。
还应该画出流程图(实验装置的结构示意图),再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。
数据记录和计算指从实验中测出的数据以及计算结果。
结论(结果)即根据实验过程中所见到的现象和测得的数据,作出结论。
小结对本次实验的体会、思考和建议。
备注或说明可写上实验成功或失败的原因,实验后的心得体会、建议等。
注意:
∙实验报告将记入实验成绩;
∙每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。
猴子分桃的故事
猴子分桃的故事
海滩上有一堆桃子,是两只猴子的共有财产.
猴子性急,有时也很正直.
第一只猴子来到海滩后想要取走自己的一份,于是便把桃子均分为两堆,发现还多一个,便把多余的一个扔进大海,取走自己应得的一份.第二只猴子来到海滩后也想取走自己的一份,猴子总归是猴子,它无法知道伙伴已取走一份,于是第二只猴子又把桃子均分为两堆,发现还多一个,便把多余的一个扔进大海,取走自己应得的一份.
如果原有的桃子数不小于100,那么第一只猴子至少可以取走几个桃子呢?
用算术去解也许不容易,用“列出代数式”的方法试试看:
如果第二只猴子取走的桃子数用A表示,那么,取走前它所面临的桃子数应为2A+1;(想一想,为什么?)
第一只猴子留下的桃子数既然是2A+1,那么,它取走的桃子数也应为2A +1;
第一只猴子取走前,它所面临的桃子数应为(2A+1)+(2A+1)+1,即4A+3.
这说明,海滩上原有桃子数为4A+3,但这堆桃子不少于100只,所以A不小于25.因此第一只猴子至少可以取走2×25+1=51个桃子.
回顾整个解题过程,我们总是一步步地“先把问题中与数量有关的词语,用含有数、字母和运算符号的式子表示出来”,也就是说,“列出代数式”对解题起到了重要作用.
思考:如果这堆桃子是3只猴子的共有财产,问题又如何解决呢?如果是4只、5只猴子的共有财产呢?。
C语言程序设计例子(3):猴子吃桃问题
C语⾔程序设计例⼦(3):猴⼦吃桃问题题⽬:猴⼦吃桃问题:猴⼦第⼀天摘下若⼲个桃⼦,当即吃了⼀半,还不瘾,⼜多吃了⼀个 第⼆天早上⼜将剩下的桃⼦吃掉⼀半,⼜多吃了⼀个。
以后每天早上都吃了前⼀天剩下 的⼀半零⼀个。
到第10天早上想再吃时,见只剩下⼀个桃⼦了。
求第⼀天共摘了多少。
思路分析:采⽤逆向思维,从后往前推断,发现其中有相同的地⽅,即出现递推公式,可以采⽤递归⽅法。
令S10=1,容易看出S9=2(S10+1),简化⼀下S9=2S10+2S8=2S9+2…..Sn=2Sn+1+2下⾯我将解决这个问题。
(第⼀种为普通循环⽅式,第⼆种为递归⽅式)⽅法⼀:while#include<stdio.h>int main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2;x2=x1;day--;}printf("the total is %d\n",x1);}⽅法⼆:递归#include<stdio.h>int sumPeach(int day);int main(){int sum;sum=sumPeach(1);printf("%d",sum);}int sumPeach(int day){if(day==10){return1;}elsereturn2*sumPeach(day+1)+2;}。
敬献给李政道博士——五猴分桃类型题简易通解公式上传.doc2
敬献给若贝尔奖获得者李政道博士——五猴分桃类型题简易通解公式(完善版)序:“五猴分桃问题”的前身是国外著名的“水手分椰子问题”,剧说,最早是由伟大物理学家狄拉克于1926年提出来的, 随后, 在经过美国数学科普大师马丁* 加德纳的介绍、推广后,该题得到了更为广泛的流传。
1979年,“诺贝尔奖”获得者李政道博士, 序:“五猴分桃问题”的前身是国外著名的“水手分椰子问题”,剧说, 在“中国科技大学少班”讲学时,特意提到此题。
此后, 研究该题的简易计算方法,迅速风靡国内曾对“水手分椰子”的广泛流传起过重要作用的, 著名现代数理逻辑学家怀德海, 对此题给出过一个答案为(-4)巧妙的特解。
在后来者的不断努力下,一些比较简便的方法也逐步出现。
但严格的来说:目前所取得的成果,基本上还是局限于“五猴分桃”这一个具体题目上,离全面而又简捷地求解所有这种类型的题目,还存在着较大的距离。
1979年,本人有幸在月刊《中国青年》看到了“五猴分桃”一题,并用不定方程求得其解。
随后演算推导出能解决所有这种类题型目的简易通解公式:y=a n -db/c 。
但直到前段时期才惊呀发现: 寻找“五猴分桃”类型题的简易计算方法,竟是一个国内、外已研讨了数十年的热门话题,而且至今仍未找到较好解决办法。
于是本人通过继续对该问题的分析研究,进一步完善了该简易通解公式的求解体系,现发表与大家共同分享:一,五猴分桃类型题简易通解公式及特殊形式:1.五猴分桃问题的简易通解公式 y=a(a/m)n-1-db/c其中:y ── 被分的桃子的总个数n ── 总共分的次数(可为任意数)a ── 每次分的份数, (可为任意数)b ── 每次分a 份后的余数.c ──每次分a份后拿走的份数,d ──每次分a份后拿走c份后,剩下再分的份数.m —— (a/d)的最大公约数注:(1)在上试公式中,按照这种类型题题意的要求;y、a、b、c、d、n、m都为正整数,(2)当b/c不为正整数时,题目本身无解;若b/c为正整数时,则题目必定有解(后面会有论述)。
五猴分桃的解法
五猴分桃的解法解法一:设这一堆桃子至少有x个,由于每次平均分成五堆后都多一个,因此借给它们4个,于是连同这4个桃子,一共有(x+4)个桃子.假定这五子猴子分别拿走了(包括它们各自所吃掉的1个)a、b、c、d、e个桃子.于是,a=45x+;b=4(4)25x+;c=16(4)125x+;d=64(4)625x+;e=256(4)3125x+.而e为整数,且256与3125互质,因此x+4应是3125的倍数,于是x+4=3125k,其中k为自然数.显然,当k=1时,x=3121.即这五只猴子至少摘了3121个桃子.解法二:设第五只猴子拿走了x只桃子,那么第五只猴子取桃子前的桃子数是(5x+1);第四只猴子取桃子前还有的桃子数是[5(51)14x++];第三只猴子取桃子前还有{54[5(51)14x++]+1}个桃子;第二只猴子取桃子前还有5 4{54[5(51)14x++]+1}+1个桃子;第一只猴子取桃子前一共有5 4{54{54[5(51)14x++]+1}+1}+1=12 x+8+53(1)256x+个桃子.设x+1=256k,则x=256k-1,于是这堆桃子一共有12(256k-1)+8+53k=3125k-4.显然,当k=1时,桃子数最少,因此,这五只猴子至少摘了3121个桃子.。
Java经典基础代码
Monkey_peach代码package com.sailor.game;/*** 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩* 下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
* 程序分析:采取逆向思维的方法,从后往前推断。
** @author Sailor**/public class Monkey_Peach {public static void main(String[] args) {int[] peach = new int[10];peach[9] = 1;// 下面利用的是数组和循环将每天的桃子数量都求出来了for (int i = peach.length - 1; i > 0; i--) {peach[i - 1] = 2 * (peach[i] + 1);}for (int i = 0; i < peach.length; i++) {System.out.println(peach[i]);}System.out.println("第一天的桃子数:"+getPeach_Num(10, 1));}// 利用递归的方法来求第一天的桃子数,输入参数为天数和当天的桃子数,输出为第一天桃子数public static int getPeach_Num(int day, int peach_num) {if (day == 1)return peach_num;else if (day < 1 || peach_num < 0)return 0;elsereturn getPeach_Num(day - 1, (peach_num + 1) * 2);}}package com.sailor.game;/*** 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩* 下的桃子吃掉一半,又多吃了一个。
五猴分桃问题
1979年,诺贝尔奖获得者李政道教授到中国科技大学讲学,他给少年班的同学出了这样一道算术题:有5只猴子在海边发现一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份.问这堆桃子至少有多少只.据说没有一个同学能当场做出答案.怎么解?我在小学学竞赛的时候曾遇到了这个题,当时百思不得其解。
后来上高中后用递推数列解决了此题自以为很有成就感,后在一本书上看到的解法既揭示了问题的本质又异常简单。
突然想起这道趣题不敢独享特与大家分享。
如果借4个挑子的话。
恰好每次都能平分成5份。
就是说每次拿的桃子和扔了的加拿了的是一样多。
设开始有x 个桃子借了4个后就是(x+4)个桃子。
每次就余下前次对应的4/5,借了4个桃子后等第五只猴子来过后应该余下的桃子是54()(4)5x 个 x+4必须是5的5次方的倍数所以x 至少是3121,此时余下的桃子是1024个但借了的4个要还回去,实际余下的是1020个。
一道经典难题就轻松解决了,我们学习数学就是去享受思考的过程。
C++ 五猴分桃5只猴子一起摘了一大堆桃子,晚上有一只猴子醒来发现其他猴子都睡着了,就起来吃了一个桃子,然后将剩余的桃子恰好平均分成5份,自己拿了其中的一份藏起来,然后去睡觉.第二只猴子醒来发现其他猴子都睡着了,就像第一只猴一样先吃了一个桃子,然后将其它的桃子又恰好平均分成5份,自已也拿了其中的一份藏起来,接着又去睡觉.第三只,第四只,第五只猴都像第一第二只猴一样做了,现问:这5只猴至少摘了多少个桃子?3121个*/#include "iostream.h"void main(){long k,houzi=1,i=4,m_find=0;float n;while(i<50000){n=(float)i*5/4+1;if(n==(int)n){houzi=1;while(houzi<6){k=(long)n;n=(float)k*5/4+1;if(n==(int)n)houzi++;elsebreak;if(houzi==5){m_find++;cout<<"第"<<m_find<<"次找到"<<endl;cout<<"总的桃子有"<<n<<"个"<<endl;}}i++;}elsei++;}}5个猴子摘了一堆桃子,约好第二天早上来分。
小升初数学应用题大全:猴子分桃
2019年小升初数学应用题大全:猴子分桃有一群猴子,分一堆桃子,第一只猴子分了4个桃子和剩下桃子的1/10,第二只猴子分了8个桃子和这时剩下桃子的1/10,第三只猴子分了12个桃子和这时剩下桃子的1/10........依次类推.最后发现这堆桃子正好分完,且每只猴子分得的桃子同样多.那么这群猴子有多少只?方程解法:设总的桃子个数是10a+4个,那么第一只猴子分得a+4个桃子剩下9a,假设9a=10b+8个,那么第二只猴子分得b+8个桃子。
所以a+4=b+8,即b=a-4个。
那么就有9a=10(a-4)+8。
解得a=32。
所以桃子有32×10+4=324个。
每只猴子分得32+4=36个,所以猴子有324÷36=9只。
明月清风老师的解法。
第一只猴子分得的那1/10比第二只猴子的那1/10多8-4=4个第一只猴子分得的那1/10对应的单位1比第二只猴子分得的1/10对应的单位1多4÷1/10=40个。
那么第一只猴子分得的那1/10是40-8=32个。
所以桃子总数是32×10+4=324个。
要练说,得练听。
听是说的前提,听得准确,才有条件正确模仿,才能不断地掌握高一级水平的语言。
我在教学中,注意听说结合,训练幼儿听的能力,课堂上,我特别重视教师的语言,我对幼儿说话,注意声音清楚,高低起伏,抑扬有致,富有吸引力,这样能引起幼儿的注意。
当我发现有的幼儿不专心听别人发言时,就随时表扬那些静听的幼儿,或是让他重复别人说过的内容,抓住教育时机,要求他们专心听,用心记。
平时我还通过各种趣味活动,培养幼儿边听边记,边听边想,边听边说的能力,如听词对词,听词句说意思,听句子辩正误,听故事讲述故事,听谜语猜谜底,听智力故事,动脑筋,出主意,听儿歌上句,接儿歌下句等,这样幼儿学得生动活泼,轻松愉快,既训练了听的能力,强化了记忆,又发展了思维,为说打下了基础。
宋以后,京师所设小学馆和武学堂中的教师称谓皆称之为“教谕”。
java常见算法题目
java常见算法题⽬1: JAVA经典算法40题2: 【程序1】题⽬:古典问题:有⼀对兔⼦,从出⽣后第3个⽉起每个⽉都⽣⼀对兔⼦,⼩兔⼦长到第四个⽉后每个⽉⼜⽣⼀对兔⼦,假如兔⼦都不死,问每个⽉的兔⼦总数为多少? 3: 1.程序分析:兔⼦的规律为数列1,1,2,3,5,8,13,21....4: public class exp2{5: public static void main(String args[]){6: int i=0;7: for(i=1;i<=20;i++)8: System.out.println(f(i));9: }10: public static int f(int x)11: {12: if(x==1 || x==2)13: return 1;14: else15: return f(x-1)+f(x-2);16: }17: }18: 或19: public class exp2{20: public static void main(String args[]){21: int i=0;22: math mymath = new math();23: for(i=1;i<=20;i++)24: System.out.println(mymath.f(i));25: }26:27: }28: class math29: {30: public int f(int x)31: {32: if(x==1 || x==2)33: return 1;34: else35: return f(x-1)+f(x-2);36: }37: }38:39: 【程序2】题⽬:判断101-200之间有多少个素数,并输出所有素数。
40: 1.程序分析:判断素数的⽅法:⽤⼀个数分别去除2到sqrt(这个数),如果能被整除,41: 则表明此数不是素数,反之是素数。
42: public class exp2{43: public static void main(String args[]){44: int i=0;45: math mymath = new math();46: for(i=2;i<=200;i++)47: if(mymath.iszhishu(i)==true)48: System.out.println(i);49: }50: }51: class math52: {53: public int f(int x)54: {55: if(x==1 || x==2)56: return 1;57: else58: return f(x-1)+f(x-2);59: }60: public boolean iszhishu(int x)61: {62: for(int i=2;i<=x/2;i++)63: if (x % 2==0 )64: return false;65: return true;66: }67: }68:69: 【程序3】题⽬:打印出所有的 "⽔仙花数 ",所谓 "⽔仙花数 "是指⼀个三位数,其各位数字⽴⽅和等于该数本⾝。
猴子吃桃问题python
猴子吃桃问题,猴子第一天摘下若干个桃子,当天吃掉一半多一个,第二天接着吃掉剩下的一半多一个,以后每天都吃了剩下桃子的一半多一个,到第八天发现只剩下1个桃子,请问猴子第一天共摘了多少个桃子?
分析:
假设猴子第n天的桃子数为Pn,前一天的桃子数为Pn-1,则Pn=(1/2Pn-1)-1,以此类推
实现代码:方法一
i=1
for n in range(10,0,-1):
print("第{}天有{}个桃子".format(n, i))
i=(i+1)*2
效果截图:
实现代码:方法二
分析:
采用倒推的方法。
由题目可知第10天剩下1个,而第9天吃了一半零一个,设第9天的桃子数为n,则n-(n/2+1)=1,求得n=2*(1+1)。
推广到一般情况,若第d天桃子数为m,则第d-1天的桃子数为2*(m+1)。
代码如下:
def monkey():
n = 10
i = 1
while n > 1:
i= i - 1
i = (i + 1) * 2
print("第{}天有{}个桃子".format(n, i)
if __name__ == '__main__':
monkey()。
猴子吃桃子问题完美解决版
。
。
如果只吃n天应该一共要吃1 + 3 + 6 + 12 +24+42+。。。。。。。
也就是除了第一天外其余每天吃桃子的个数都是前天的2倍(大家可以从3,6,12,24,48中看出)
因此程序解决办法为
public class Demo03_对象A {
publicstatic void main(String[]args) {
猴子吃桃子问题想必就不用说了:
现在提出解决问题方法:首先说的是谭老的《C语言程序设计》解决办法有问题至于问题在哪里不说。大家可以用软件仿真一下和你算得结果是否相同
分析:
如果只吃一天应该一共只有1个桃子吃1个
如果只吃2天应该是一共3+1 = 4个桃子吃3个
如果只吃3天应该是一共6 + 1+ 3 = 10个桃子吃6个
intday = 10 ;
intsum = 0 ;//sum表示吃到第几天时的桃子总数
inttmp= 3;//tmp每天吃桃子的个数
while(day > 0 ) {
iout.println("第10天还有一个");
} elseif(day == 9) {
sum=tmp+ sum;
} else {
tmp=tmp*2;
sum= sum +tmp;
System.out.println("第"+day+"天还有桃子"+tmp+"个");
}
day--;
}
System.out.println("因此一共有桃子"+sum + "个");
经典数学小故事《猴子分桃》很有意思
经典数学小故事?猴子分桃?很有意思
经典数学小故事?猴子分桃?很有意思
海滩上有一堆桃子,是两只猴子的共有财产。
猴子性急,有时也很正直。
第一只猴子来到海滩后想要取走自己的一份,于是便把桃子均分为两堆,发现还多一个,便把多余的一个扔进大海,取走自己应得的一份。
第二只猴子来到海滩后也想取走自己的一份。
猴子总归是猴子,它无法知道伙伴已取走一份。
于是第二只猴子又把桃子均分为两堆,发现还多一个,便把多余的一个扔进大海,取走自己应得的一份。
假设原有的桃子数不小于100,那么第一只猴子至少可以取走几个桃子呢?
用算术去解也许不容易,用“列出代数式〞的方法去试试看:
假设第二只猴子取走的桃子数用A表示,那么,取走前它所面临的桃子数应为2A+1;〔想一想,为什么?〕
第一只猴子留下的桃子数既然为〔2A+l〕,那么,它取走的桃子数也应为2A+1;
第一只猴子取走前,它所面临的桃子数应为〔2A+1〕+〔2A+1〕+1,即4A+3。
这说明,海滩上原有桃子数为4A+3,但这堆桃子不少于100
个,所以A不小于25。
因此第一只猴子至少可以取走51〔=2×25+1〕个桃子。
回忆整个解题过程,我们总是一步步地“先把问题中与数量有关的词语,用含有数、字母和运算符号的式子表示出来〞,也就是说,“列出代数式〞对解题起到了重要作用。
考虑:假设这堆桃子是3只猴子的共有财产,问题又该如何解决呢?假设是4只、5只猴子的共有财产呢?。
java编程习题之猴子偷桃
java编程习题之猴⼦偷桃题⽬:海滩上有⼀堆桃⼦,五只猴⼦来分。
第⼀只猴⼦把这堆桃⼦凭据分为五份,多了⼀个,这只猴⼦把多的⼀个扔⼊海中,拿⾛了⼀份。
第⼆只猴⼦把剩下的桃⼦⼜平均分成五份,⼜多了⼀个,它同样把多的⼀个扔⼊海中,拿⾛了⼀份,第三、第四、第五只猴⼦都是这样做的,问海滩上原来最少有多少个桃⼦?⼤⼀⼩⽩直线思维解题思路/**** @desc :题⽬:海滩上有⼀堆桃⼦,五只猴⼦来分。
第⼀只猴⼦把这堆桃⼦凭据分为五份,多了⼀个,这只猴⼦把多的⼀个扔⼊海中,拿⾛了⼀份。
第⼆只猴⼦把剩下的桃⼦⼜平均分成五份,⼜多了⼀个,它同样把多的⼀个扔⼊海中,拿⾛了⼀份,第三、第四、第五只猴⼦都是这样做的,问海滩上原来最少有多少个桃⼦?* @author li Ya Hui* @time 2020-04-04 4:58:57* @file*/public class HopuZi {public static void main(String[] args){int a =0;int b =0;while(true){a++;//循环值b++;//循环值⼆if(a%4==0&&(a-1)%5==0){//第四只猴⼦的4份桃⼦a = a/4*5+1;if(a%4==0&&(a-1)%5==0){//第三只猴⼦的4份桃⼦a = a/4*5+1;if(a%4==0&&(a-1)%5==0){//第⼆只猴⼦的4份桃⼦a = a/4*5+1;if(a%4==0&&(a-1)%5==0){//第⼀只猴⼦的4份桃⼦a = a/4*5+1;System.out.println(a);//总数break;}}}}a=b;//如果跳出,将a赋回原值}}}最⼩的桃⼦数量为:。
小学数学 数学故事 猴子分桃
猴子分桃
海滩上有一堆桃子,是两只猴子的共有财产。
猴子性急,有时也很正直。
第一只猴子来到海滩后想要取走自己的一份,于是便把桃子均分为两堆,发现还多一个,便把多余的一个扔进大海,取走自己应得的一份。
第二只猴子来到海滩后也想取走自己的一份.猴子总归是猴子,它无法知道伙伴已取走一份。
于是第二只猴子又把桃子均分为两堆,发现还多一个,便把多余的一个扔进大海,取走自己应得的一份.
如果原有的桃子数不小于100,那么第一只猴子至少可以取走几个桃子呢?
用算术去解也许不容易,用“列出代数式"的方法去试试看:
如果第二只猴子取走的桃子数用A表示,那么,取走前它所面临的桃子数应为2A+1;(想一想,为什么?)
第一只猴子留下的桃子数既然为 (2A+l),那么,它取走的桃子数也应为2A+1;
第一只猴子取走前,它所面临的桃子数应为(2A+1)+(2A+1)+1,即4A+3.
这说明,海滩上原有桃子数为4A+3,但这堆桃子不少于100个,所以A
不小于25.因此第一只猴子至少可以取走51(=2×25+1)个桃子.
回顾整个解题过程,我们总是一步步地“先把问题中与数量有关的词语,用含有数、字母和运算符号的式子表示出来",也就是说,“列出代数式”对解题起到了重要作用。
思考:如果这堆桃子是3只猴子的共有财产,问题又该如何解决呢?如果是4只、5只猴子的共有财产呢?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while(true){
peaches+=5;//桃子每次加5个,保证能被5整除,提高执行效率
int temp=peaches;//桃子数的计数器
int t=0;//满足条件次数的计数器
for(int i=1;i<=5;i++){
*/
public class MonkeyDividePeaches {
public static void main(String[] args) {
div1();
div2();
div3();
}
//第一种方法
public static void div1(){
if((temp-1)%5==0){
temp=(temp-1)*4/5;
t++;
}
else {
break;
}
}
if(t==5)//5次满足条件,程序结束
break;
}
System.out.println(peaches);
if(m%(5-1)==0){
m=m/(5-1)*5+1;
flag++; //计算多少次的桃子数量被4整除
}
else
break;
}
if(flag==5) //每次的桃子数量都能被4整除
break;
/**
* 猴子分桃问题
* 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五分,多了一个,
* 这只猴子把多的一个扔入海中,拿走了一份,第二只猴子把剩下的桃子又平均分成 五分,
* 又多了一个,他同样把多的一个扔入海中,拿走了一份,第三第四第五值猴子都是这Байду номын сангаас做的,
* 问海滩上原来最少有多少个桃子,第五只猴子得到多少桃子
int peaches=1;//桃的总数
int peach=1;//每次分桃的总数
//循环进行给每个猴子分桃
while(monkey<=5){
if(peach%5==1&&peach/5!=0){//如果成功分桃
peach=(peach/5)*4;//可分桃的总数为现在的4/5
}
//第四种方法
}
monkey++;//换下一个猴子
}
else{//如果失败,重新分桃这时可分桃数量加1
peaches++;
peach=peaches;
monkey=1;
}
}
System.out.println("桃的最小总数为:"+peaches);
n++;
}
System.out.println("开始的桃子数至少是:"+m);
System.out.print("此时第五个猴子得到的桃子数是:"+n);
}
//第三种方法
public static void div3(){
int monkey=1;//要分桃的猴子数
}
//第二种方法
public static void div2() {
int n=1;//第五个猴的桃
int m=0;// 分之前的桃
int flag=1;
while(true){
flag=1;
m=5*n+1;
for(int i=5;i>=1;i--){