- /*
- 海滩上有一堆桃子,五只猴子平分,第一只猴子把这堆桃子平均分了五份多了一个,
- 这只猴子把多的一个扔到海里,拿走了一份,第二只猴子把剩下的平均分成五份又多了一个,
- 他同样把多的一个扔进海里,拿走了一份,第三、四、五只猴子都这样做,
- 问海滩上原来最少有多少个桃子?
- */
- public class Monkey {
- public static void MPeach() {
- int i = 4; // 假设的最后桃子个数(5个猴子都分完之后所剩的桃子),最后桃子个数一定是4个倍数(因为要分成5等份,而最后一只猴子拿走了一份)
- int k = 0; // 分桃上次所剩桃子的个数
- int count; // 分桃次数
- int j;
- int m;
- while (i < 10000)// 最少桃子数的范围
- {
- count = 1;
- m = i; // 倒着分完第count次后的桃子数
- j = 0;
- while (j < 5 ) {
- k = i / 4 * 5 + 1;
- i = k;
- if (k % 4 == 0) { // 第count次分完后所剩的桃子书还是4的倍数
- count++;
- } else {
- break;
- }
- j++;
- }
- i = m;
- if (count == 5) {
- break;
- }
- i += 4;
- }
- System.out.println(k);
- }
-
- public static void Mpeach02(){
- int sum2; // 用来完成桃数运算的变量
- int sum1 = 6; // 实际的桃子总数
- int count ;
- int index ;
- boolean flag = true; // 控制外层循环
- while (flag) {
- index = 0; // 初始化分桃子的次数为0
- count = 0; // 初始化为第一个猴子开始分桃子
- sum2 = sum1; // 初始化逻辑运算的桃子总数为实际的桃子总数,因为此变量用于计算,所以值会改变,为了不影响实际的桃子总数,所以用此变量代替!
- while (count < 5) {
- if (sum2 % 5 == 1) { // 如果桃子总数除以5余1说明此桃子总数符合分桃方案
- sum2 -= 1; // 因为桃子被猴子扔掉一个,所以要减1
- sum2 = sum2 - sum2 / 5; // 又因为桃子被平均分为了5份并且被猴子拿走了1份,所以要减1/5
- index++; // 如果符合分桃方案就将计数器加1
- }
- // 如果计数器等于5,也就是桃子的总数在符合分桃方案(sum2%5 == 1)的前提下分可5次的话!说明此桃子总数是符合条件的最小整数!
- if (index == 5) {
- System.out.println("最少有 " + sum1 + " 个桃子!");
- flag = false;// 循环结束
- }
- count++;
- }
- sum1 += 5; // 桃子的总数只有每次递增5才可以符合分桃方案(sum2%5 == 1)!
- }
- }
- public static void main(String[] args) {
- MPeach();
- Mpeach02();
- }
- }
复制代码 |