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

被折叠的 条评论
为什么被折叠?



