海滩猴子分桃(算法)

35 篇文章 0 订阅
2 篇文章 0 订阅

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

题干分析:
1.题意说的是最少多少个桃子,那么我们就得去考虑最后一只猴子拿到的数量,能不能满足要求即可,

程序分析:
1.先假设最后一天猴子拿到的数量(num)和桃子总数量(numAll)

2.最后一只猴子拿的就从拿走最少1个去开始循环

3.总数量一定是要整除4(因为下一只猴子是在上一只猴子扔掉一个并且均分5份拿走一份后的总数的基础上再去扔一个分5份)和能够满足**5+1,

4.要确保每一次的数量都能整除4,所以这时我们还得定义一个变量去接收每一只猴子当前拿到的桃子数量sumNow

5.当到最后一只猴子拿,并且满足条件后,就结束循环*

代码实现:

/**
 * @Author 小王
 * @DATE: 2022/6/20
 */
/*
【程序41】
        题目:海滩上有一堆桃子,五只猴子来分。
        第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
        第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
        第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

/*    非递归分析:
1.先假设最后一天猴子拿到的数量(num)和桃子总数量(numAll)
2.总数量一定是要整除4(因为下一只猴子是在上一只猴子扔掉一个并且均分5份拿走一份后的总数的基础上再去扔一个分5份)和能够满足*5+1,
3.要确保每一次的数量都能整除4,所以这时我们还得定义一个变量去接收每一只猴子当前拿到的桃子数量sumNow
4.当到最后一只猴子拿,并且满足条件后,就结束循环*/

public class Topic41 {
    public static void main(String[] args) {
        sum();
    }
    public static void sum(){
        int num=1;//假设最后一只猴子拿到的数量
        int numNow=num;//当前这只猴子(第i只猴子)所拿到的数量
        int sum=0;//猴子拿的时候的总数量,确保这个数要能够整除4
        for (int i = 5; i >0 ; ) {//i表示第几只猴子
            sum=numNow*5+1;
            if (i==1){//当猴子数量为1的时候,就结束循环
                System.out.println(sum);
                break;
            }
            if (sum % 4 == 0){//如果总数能够整除4,就代表满足情况
                i--;
                numNow=sum/4;//满足后,那么下一只猴子拿的就是总数了
            }else {//如果不能整除4,那么代表最后一只猴子拿的数量不对,就需要改变最后一只猴子拿的数量
                num++;
                numNow=num;//又要改变一下当前拿到的桃子数
                i=5;//因为拿的数量不对,所以又要回到最后一只猴子去重新拿
            }
        }
    }

}

输出:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值