题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
解法一:递归反向推导,求出的结果是每次平分五分多一个,但猴子没有拿一份的操作
public class Demo02 {
public static void main(String[] args) {
int num= method(1);
System.out.println("桃子数最少:"+num);
}
public static int method(int a){
if(a<=5){
return method(a+1)*5+1;
}else{
return 1;
}
}
}
解法二 正向推导,推出一个满足每次平分五次多一,猴子拿走一份的情况,满足五次则成功
public class Demo03 {
public static void main(String[] args) {
//首先设想沙滩最后一只猴子去时就平均分五分扔一个,最少的情况应该是6个桃子
int index=6;//初始为6
//死循环进行判断
while(true) {
//定义finds()方法进行判断桃子
boolean finds = finds(index);
if (finds) {
System.out.println("海滩上最少有" + index + "个桃子。");
break;
}
index += 5;//每次加五个桃子
}
}
//判断方法
public static boolean finds(int num){
boolean flag=false;//未找到最少的桃子数则为false
for (int i = 1; i <=5; i++) {//五只猴子,进行五次平均分
if(num>5 && num%5==1){//桃子必须大于五,并且平分后余一
if(i==5){//如果五次评分后还有则直接true返回
flag=true;
}else{
num=((num-1)*4)/5;//没到第五次平分则进行减少
}
}else{
return false;
}
}
return flag;
}
}
此题的两种结果方法一是:3906,方法二是:3121(对)