题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
思路:第一只猴子分出的一份桃中有x个, 起始5x+1,剩余4x
第二只猴子分出的一份桃有y个 (4x-1)/5=y ,起始4x=5y+1,剩余4y
。。。然而读到最后可知最后一个猴子一份桃中若有n个,起始5n+1,剩余4n个
前一个猴子的剩余个数是后一个猴子的起始个数
n的条件是1),正整数(n>=1) 2),(5n+1)/4为正整数
最后一个猴子起始最少(5n+1)个
第四个猴子起始5*((5n+1)/4)+1
第三个猴子起始5(5((5n+1)/4)+1)+1
第二个猴子起始5(5(5*((5n+1)/4)+1)+1)+1
第一个猴子。。。以此类推
依题可知
从最后一个猴子入手,它的起始桃子个数就是上一个猴子剩余桃子个数,此个数能整除4.我们假设最后一个猴子分桃子一份个数为n个,那么他的桃子起始数量就为5n+1,即它上一个猴子的桃子剩余数量。从而找到第一个猴子的起始数量即为海滩桃子的数量。
代码
int num = 5;//num代表猴子数量
int n = 3;//n代表最后一只猴子分出一份中的个数
int startNum = 0;//每个猴子的起始数量
for (int i = 0; i < num; i++) {//i=0时为第num个猴子
if (i == 0) {
startNum = 5 * n + 1;
} else {
if (startNum % 4 != 0){
n++;
i = -1;//回到第num只猴子
}else {
startNum = 5 * (startNum / 4) + 1;
}
}
}
System.out.println("海滩上原来最少有多少个桃子(即第一个猴子的起始数量)="+startNum+" 相应第"+num+"个猴子的每份桃子的数量为="+ n);
网友评论