猴子背100根香蕉问题程序实现

问题描述:有只猴子在树林采了100根香蕉堆成一堆,猴子家离香蕉堆50米,猴子打算把香蕉背回家, 每次最多能背50根,可是猴子嘴馋,每背一米要吃一根香蕉,问猴子最多能背回家几根香 蕉?

我的理解是返回背香蕉时 不吃香蕉 (否则这个问题没法解决)
在网上看到一个上述小学题目,议论纷纷,想了一下得到的答案是每次走25m剩下25个,网上评论一看,大多是这个思路,但我觉得不只一种答案,于是在刚好在学java,就随手把这个问题实现了下,结果是什么呢?

public class TestMonkey {
    public static void main(String[] args) {
        // TODO 测试猴子背香蕉最佳方案
        ArrayList<CountNum> arr=new ArrayList<CountNum>();
        int allCount;
        int left=0; //不能整除剩余米数
        int count=0;//所走段数
        for (int i = 1; i <=50; i++) {
            allCount=100;
            count=50/i;
            left=50%i;
            for (int j = 1; j <=count; j++) {

                if(allCount>50){//大于50时,要背两次
                    allCount-=i*2;
                }else if(allCount>0){ //小于50大于0 背一次
                    allCount-=i;
                }else{
                    break;
                }
            }
            //不能整除时, 剩下的余数 所背米数
            if(left!=0){            
                allCount-=left;
            }
            arr.add(new CountNum(i, allCount));

            if(allCount>Best.BEST.value){
                Best.valueOf("BEST").Setv(allCount);
            }
        }
        for (CountNum c: arr) {
            if(c.getAllcount()==Best.BEST.value)
                System.out.println("方案"+c.getI()+"\t每次背"+c.getI()+"m  \t剩下"+c.getAllcount()+"根香蕉\t 最佳");


        }

    }

}

class CountNum{
    private int i; //每次所背米数
    private int allcount;//剩下香蕉数

    public CountNum(int i, int allcount) {
        this.i = i;
        this.allcount = allcount;
    }
    public int getI() {
        return i;
    }
    public void setI(int i) {
        this.i = i;
    }
    public int getAllcount() {
        return allcount;
    }
    public void setAllcount(int allcount) {
        this.allcount = allcount;
    }

小小枚举 小公举

public enum Best{
        BEST(0);

        private int value;
        Best(int value){
            this.value=value;
        }
        public  int value(){
            return value;
        }
        public void Setv(int v){
            this.value=v;
        }
    }

**运行结果
方案1 每次背1m 剩下25根香蕉 最佳
方案5 每次背5m 剩下25根香蕉 最佳
方案25 每次背25m 剩下25根香蕉 最佳**

这是我的理解,如有不同意见,欢迎提出讨论!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值