算法学习之穷举--泊松分酒详细代码加注释

1.穷举思想简述
  穷举法可谓是计算机程序设计中最经典也最为简单的一种算法,其依赖于计算机强大的计算能力来穷尽每一种可能存在的情况,从而达到问题的求解。另外,该法也被称之为暴力求解法;实际上如果你愿意的话,几乎大多数问题都可以转换为穷举求解的过程,但因为穷举算法的效率不高,所以它一般被用于一些没有明显规律可循的场合。
  
2.算法的执行流程
  在使用穷举法时,首先是明确问题答案的范围,以便在指定范围内搜索答案。指定范围以后,则可通过循环和条件判断的方式逐个验证每个答案,从而得出符合条件限定的正确答案。

原文:https://blog.csdn.net/a574780196/article/details/84038237 
 

本人小白希望哪里做的不好不对希望大佬们谅解

package sharewine;
/*
    泊松分酒  穷举学习 大致理解思想就是不停的按照指定的规则去倒酒 直到导出后停止
    初始酒量: 12 0 0
    12L
    8L
    5L

    6L
    制定一些计划
    1->2->3->1
    1等2为空的时候再倒酒,2必须把3倒满 ,3满后才向1中到
 */
public class ShareWine {
    private int b1=12;
    private int b2=8;
    private int b3=5;
    private int m=10;//目标酒量
    private void backBottle(int bb1,int bb2,int bb3){
        System.out.println("bb1:"+bb1+"---"+"bb2:"+bb2+"---"+"bb3:"+bb3);
      //首先判断是否有条件成立的酒杯
        if(bb1==m||bb2==m||bb3==m){
            System.out.println("倒出了"+m);
        }else{
            //第二个杯子为空了按照规定应从第一个杯子向第二个杯子到
            if (bb2==0){
                //第二个杯子能呗倒满
                if (bb1>=bb2){
                    backBottle(bb1-b2,b2,bb3);
                }else {
                    backBottle(0,bb2+bb1,bb3);
                }
            }else if (bb3!=b3){
                //第二个杯子不为空的时候 且第二杯中的酒倒向第三杯时能够倒满时
                   if (bb3+bb2>=b3){
                       backBottle(bb1,bb2-(b3-bb3),b3);
                       //第二个杯子不能为空的时候,且第二杯想第三杯到的时候倒不满
                   }else {
                       backBottle(bb1,0,bb3+bb2);
                   }
                   //bb3中满的时候
            }else if (bb3==b3){
                backBottle(bb1+b3,bb2,0);
            }
        }
    }

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

}

猜你喜欢

转载自blog.csdn.net/microopithecus/article/details/84555695