Java.桃子分五份, 多一个扔掉, 拿走其中一份问题, 结果(3121个桃子)

Java.桃子分五份, 多一个扔掉, 拿走其中一份问题, 结果(3121个桃子),第1张

Java.桃子分五份, 多一个扔掉, 拿走其中一份问题, 结果(3121个桃子) 第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份;第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份;第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

结果:最少3121个桃子。
主要问题在于: 第五只猴子手上此时拿到的最少的桃子数量如何确定;

思路:
1 这里存在一个前提,第五只猴子手里所有桃子,以此向前推,要求前面的桃子一定要是整数,这样看很明显第五只猴子手里6个桃子不合理;
2 每一只猴子手上桃子总数是前一只猴子分好五份中的其中四分,也就是仅仅占4/5, 同时前一只还扔掉一个桃子;
3 定义一个初始值,定义为最小一份的桃子数 x ;
4 题上仅五只猴子,所以需要向前推四次,并且每次前推获得的数值一定为整数(这很重要);
5 每次前推为整数,就将前一只猴子所分的一份赋值给 x ;
6 循环出来判断,是否成功赋值 4 次.
	不是: 就将sum++,重新循环; 
	是,此时赋值得到的 x 值就是最初的桃子中的一份,所以 x * 5 + 1 即可;
7 只有当前推四次均为整数时,那么得到的最终数值,即为结果.

代码如下:
public int getCount() {
        int sum = 1, x;
        while (true) {
            int i = 0;
            x = sum;
            for (i = 0; i < 4; i++) {
                if ((x * 5 + 1) % 4 == 0) {
                    x = (x * 5 + 1) / 4;
                } else {
                    break;
                }
            }
            if (i != 4) {
                sum++;
            } else {
                return (x * 5 + 1);
            }
        }
    }
    public static void main(String[] args) {
        System.out.println("海滩上原来的桃子数量为: " + new InitPeach().getCount());
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5683141.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存