海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子平均分为五份,多了一个, 这只猴子把多的一个扔入海中,拿走了一份。 * 第二只猴子把剩下的桃子又平均分成五份,又多了一个, 它同样把多的一个扔入...

博客围绕海滩上五只猴子分桃问题展开,给出两种解题思路。思路1用递归解决,思路2通过设第5只猴子得到的桃子数,推导第4只猴子得到的桃子数,还对推导过程进行了解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子平均分为五份,多了一个, 这只猴子把多的一个扔入海中,拿走了一份。
* 第二只猴子把剩下的桃子又平均分成五份,又多了一个, 它同样把多的一个扔入海中,拿走了一份, 第三、第四、第五只猴子都是这样做的,
* 问海滩上原来最少有多少个桃子?

 

思路1: 逆序 原来 第1只 第2只 第3只 第4只 第5只 n n-n/5-1 m-m/5-1 x-x/5-1 使用递归来解决问题

 

public class 第四十一题猴子分桃子 {
    public static void main(String[] args) {
        /*
         * 思路: 逆序 原来 第1只 第2只 第3只 第4只 第5只 n n-n/5-1 m-m/5-1 x-x/5-1 使用递归来解决问题
         */
        int sum = 0;
        for (int i = 60; i < 6100; i++) {
            int n = i;
            for (int m = 1; m < 6; m++) {
                sum += getValue(n, m);
            }
            if (sum == n) {
                System.out.println(i);
            }
        }
    }

    // 获取第m只猴子拿走的桃数量
    public static double getValue(int d, int m) {// n为总数,m为第1,2,3,4,5只猴
        int result = 0; // 保存结果
         result =  d / 5 + 1; // 第一只
        if (m == 1) {
            return result;
        } else {
            return getValue((d - result), m - 1);
        }
    }
}

 

思路2: 

设第5只猴子得到a个桃子.分队前有5a+1 第四只得到 (5a+1)/4 分堆前有 (5a+1)/4 + 1 .我想知道为什么 第四子猴子得到
* (5a+1)/4 为什么不是 (5a+1)/5 为什么第四子得到的不是 5a+1
*
* 设第四只猴子拿【暂不说 得】到y个苹果,那么还剩下(除了扔掉的一个)4y个!而 4y=5a+1 所以 y=(5a+1)/4 .即第4只猴子得到
* (5a+1)/4 个苹果.

 

public class 第四十一题猴子分桃子_version2 {
    public static void main(String[] args) {
        // 统计次数
        int count, m, j = 0;
        for (int i = 4; i < 10000; i += 4) {
            count = 0;
            m = i;
            for (int k = 0; k < 5; k++) {
                j = i / 4 * 5 + 1;
                i = j;
                if (j % 4 == 0) {
                    count++;
                } else 
                    break;
            }
            i = m;
            if (count == 4) {
                System.out.println("原有桃子" + j + "个");
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/zjulanjian/p/10952744.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值