题目:
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
题干分析:
1.题意说的是最少多少个桃子,那么我们就得去考虑最后一只猴子拿到的数量,能不能满足要求即可,
程序分析:
1.先假设最后一天猴子拿到的数量(num)和桃子总数量(numAll)
2.最后一只猴子拿的就从拿走最少1个去开始循环
3.总数量一定是要整除4(因为下一只猴子是在上一只猴子扔掉一个并且均分5份拿走一份后的总数的基础上再去扔一个分5份)和能够满足**5+1,
4.要确保每一次的数量都能整除4,所以这时我们还得定义一个变量去接收每一只猴子当前拿到的桃子数量sumNow
5.当到最后一只猴子拿,并且满足条件后,就结束循环*
代码实现:
/**
* @Author 小王
* @DATE: 2022/6/20
*/
/*
【程序41】
题目:海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
/* 非递归分析:
1.先假设最后一天猴子拿到的数量(num)和桃子总数量(numAll)
2.总数量一定是要整除4(因为下一只猴子是在上一只猴子扔掉一个并且均分5份拿走一份后的总数的基础上再去扔一个分5份)和能够满足*5+1,
3.要确保每一次的数量都能整除4,所以这时我们还得定义一个变量去接收每一只猴子当前拿到的桃子数量sumNow
4.当到最后一只猴子拿,并且满足条件后,就结束循环*/
public class Topic41 {
public static void main(String[] args) {
sum();
}
public static void sum(){
int num=1;//假设最后一只猴子拿到的数量
int numNow=num;//当前这只猴子(第i只猴子)所拿到的数量
int sum=0;//猴子拿的时候的总数量,确保这个数要能够整除4
for (int i = 5; i >0 ; ) {//i表示第几只猴子
sum=numNow*5+1;
if (i==1){//当猴子数量为1的时候,就结束循环
System.out.println(sum);
break;
}
if (sum % 4 == 0){//如果总数能够整除4,就代表满足情况
i--;
numNow=sum/4;//满足后,那么下一只猴子拿的就是总数了
}else {//如果不能整除4,那么代表最后一只猴子拿的数量不对,就需要改变最后一只猴子拿的数量
num++;
numNow=num;//又要改变一下当前拿到的桃子数
i=5;//因为拿的数量不对,所以又要回到最后一只猴子去重新拿
}
}
}
}
输出: