穷举:泊松分酒

 有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另外两个空着。要求你只用3个容器操作,最后使得某个容器中正好有6升油。

首先定义一套规则

题目中的瓶子总共有三种,最大的A,中等的B,最小的C,我们规定:

最大的瓶子只能往中等的瓶子倒;(若中等的瓶子为空)

中等的瓶子只能往最小的瓶子倒;(若最小的瓶子不满)

最小的瓶子只能往最大的瓶子倒;(若最小的瓶子已满)

 

按照规则把所有情况列举出来即可,如果最后没倒成功,说明此规则对目标不可行。

public class ShareWine {

    private int b1 = 12;
    private int b2 = 8;
    private int b3 = 5;
    private int result=6;
    /**
     * @description 倒酒,到酒后的结果为 瓶子1剩bb1,2剩bb2,3剩bb3
     * <p>
     * 倒酒规则:按照规则把所有情况写出来即可
     * 最大的瓶子只能往中等的瓶子倒;(若中等的瓶子为空)
     * <p>
     * 中等的瓶子只能往最小的瓶子倒;(若最小的瓶子不满)
     * <p>
     * 最小的瓶子只能往最大的瓶子倒;(若最小的瓶子已满)
     * @author PangTiemin
     * @date 2021/3/4 9:59
     */
    public void shareWine(int bb1, int bb2, int bb3) {
        System.out.println("当前酒,bb1=" + bb1 + "--bb2=" + bb2 + "--bb3=" + bb3);
        if (bb1 == result || bb2 == result || bb3 == result) {
            return;
        } else if (bb2 == 0 && bb1 != 0) {
            if (bb1 > b2) {
                shareWine(bb1 - b2, b2, bb3);
            } else {
                shareWine(0, bb1, bb3);
            }
        } else if (bb2 != 0 && bb3 != b3) {
            if ((bb2 + bb3) > b3) {
                shareWine(bb1, bb2 - (b3 - bb3), b3);
            } else {
                shareWine(bb1, 0, bb2 + bb3);
            }
        } else if (bb3==b3&&bb1!=b1) {
            if ((bb1+bb3)>b1){
                shareWine(b1,bb2,bb3-(b1-bb1));
            }else {
                shareWine(bb1+bb3,bb2,0);
            }
        }
    }

    public static void main(String[] args) {
        ShareWine shareWine = new ShareWine();
        shareWine.result=6;
        shareWine.shareWine(12,0,0);
    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值