1. 程式人生 > >演算法學習之窮舉--泊松分酒詳細程式碼加註釋

演算法學習之窮舉--泊松分酒詳細程式碼加註釋

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);
    }

}