栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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());
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号