海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份, 第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
代码:
public class peach {
public static void main(String[] ars) {
/**
* 猴子分桃子 , 树林里有一堆桃子 ,
* 第一个猴子过来之后 扔到一个桃子 , 然后把桃子平均分成5份 , 自己拿走一份
第二个猴子过来 扔到一个桃子 , 把桃子平均分成5份 , 自己拿走一个份
第三个 第四个 第五个猴子都这么做 ...
请问 树林里的桃子最少要有多少个 ?
3121
3121-1 / 5 * 4 = 2496
2496 -1 /5 *4 = 1996
1996 -1 / 5 *4 = 1596
1596 -1 / 5*4 = 1276
1276 - 1/ 5*4 = 1020
*/
// 方法1
for (int i = 1;; i++) {
int sum = i;
if ((sum - 1) % 5 == 0) { //保证第一次分
sum = (sum - 1) / 5 * 4;
if ((sum - 1) % 5 == 0) { //保证第二次分
sum = (sum - 1) / 5 * 4;
if ((sum - 1) % 5 == 0) { //保证第三次分
sum = (sum - 1) / 5 * 4;
if ((sum - 1) % 5 == 0) { //保证第四次分
sum = (sum - 1) / 5 * 4;
if ((sum - 1) % 5 == 0) { //保证第五次分
System.out.println(i);
break;
}
}
}
}
}
}
//方法二:
// 升级版
for (int i = 1;; i++) {
int sum = i;
for (int j = 0; j < 5; j++) {
if( sum % 5 != 1){
break;
}
sum = (sum-1) / 5 * 4;
if( j == 4){
System.out.println(i);
return ;
}
}
}
}
}
方法三:
/**
* @author Amanda
*题目:海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?
*/
public class PeachRecursion {
public static void main(String[] args){
System.out.println(show(4,5,5,4));
}
//方法三:递归调用+三目
public static int show(int i,int monkeyCount,int monkey,int sum){
return monkeyCount == 0 ? sum : sum % 4 == 0 ?
show(i,monkeyCount - 1,monkey,sum / 4 * 5 + 1):
show(i + 1,monkey,monkey, i + 1);
}
}