public class Main1 {
/**
- 功能描述:
- 5只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
- 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉。
- 第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。
- 第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一份藏起来继续睡觉。
- 第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。
- 第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!
- 请计算一开始最少有多少根香蕉,和每只猴子得到的香蕉数量
- 题目分析:从第四只猴子看
- 第四只猴子拿走了自己那一堆,还剩下四堆,然后第五只猴子把剩下的四堆分成5堆,所以,剩下的香蕉肯定是四和五的倍数,即:最少为4*5=20
- 设最少需要 i 根香蕉,每次被猴子吃掉的香蕉为j(j<=4),剩下的香蕉就为 (i-j)-(i-j)/5 ,然后题中把 i 强转为f
- 所以,剩下的香蕉树应该为 f = (f-j) - (f-j)/5;
- 然后因为第五只猴子恰好分为5推无剩余,所以,f%5==0时,条件成立
- 因前四只猴子吃掉了多余的香蕉,并且拿走了属于自己的那一推香蕉,然后,第五只猴子分成的五推香蕉会平均分给五只猴子
- 所以,每只猴子拿到的香蕉数应该为:吃掉的+拿走的+最后的五堆之一
**/
public static void main(String[] args) {
for (int i = 20; i <9999 ; i++) {
float f = (float) i;
float f5;
float f4;
float f3;
float f2;
float f1;
for (int j = 1; j <=4 ; j++) {
f = (f-j) - (f-j)/5;
}
if (f%5 == 0){
f5 = f/5;
f1 = (i-1)/5+1+f5;
f2 = ((i-1)/5*4-2)/5+2+f5;
f3 = (((i-1)/5*4-2)/5*4-3)/5+3+f5;
f4 = ((((i-1)/5*4-2)/5*4-3)/5*4-4)/5+4+f5;
System.out.println("一共有"+i+"根");
System.out.println("第五只猴子有"+f5+"根");
System.out.println("第四只猴子有"+f4+"根");
System.out.println("第三只猴子有"+f3+"根");
System.out.println("第二只猴子有"+f2+"根");
System.out.println("第一只猴子有"+f1+"根");
break;
}
}
}
}