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());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星知微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值