ポアソン酒


package  ;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Wine w = new Wine();
		w.Backtrack(12, 0, 0);
	}

}

class Wine {
	
	int b1 = 12;
	int b2 = 8;
	int b3 = 5;
	
	int m  = 6;//  
	
	
	public Wine() {
		
	}
	
	
	public void Backtrack(int cur1,int cur2,int cur3) {
		System.out.println(cur1+" "+cur2+" "+cur3);
		if(cur1 == m || cur2 == m || cur3 == m) {
			System.out.print("find the key!");	
			return;
		}
		
		
		if(cur2 != 0 && cur3 != b3) { // 2 
			if(cur2 + cur3 <= 5)
				Backtrack(cur1,0,cur2+cur3);
			else
				Backtrack(cur1,cur2-(5-cur3),b3);
			
		}
		
		else if(cur3 == b3) { // 3 , 1 
			if(cur3 + cur1 <= b1) 
				Backtrack(cur1+cur3,cur2,0);
				else
					Backtrack(b1,cur2,cur3-(b1-cur1));
			
			
		}
		
		else if(cur2 == 0) { // 2 1 
			if(cur1 >= b2)
				Backtrack(cur1-b2,b2,cur3);
			else
				Backtrack(0,cur1,cur3);
		}
		
	}
	
}

ポアソンはフランスの数学者、物理学者、力学者です.彼は一生科学事業に力を入れ,成果が多い.確率論で有名なポアソン分布のような多くの有名な公式の定理が彼の名前で命名されている.
ある暇な時、「ポアソン分酒」という面白い質問をしたことがある.わが国でも古代に同様の問題が提起されたが、残念なことに徹底的な探索が行われず、その中で「韓信走馬分油」問題が多く伝えられている.
3つの容器があり、容量はそれぞれ12リットル、8リットル、5リットルです.このうち12リットルには油がいっぱい入っていて、他の2つは空いています.3つの容器だけで操作し、最後にある容器にちょうど6リットルの油があるようにする必要があります.
次のリストは、12,0,4,8,0 4,3,5 9,3,0 9,0,3,1,6,5の可能な動作状態記録です.
行ごとに3つのデータ、それぞれ12,8,6リットルの容器の中の油の量を表します
1行目は初期状態、2行目は12リットルを8リットルの容器に入れた状態、3行目は8リットルを5リットル…
もちろん、同じテーマにはさまざまな正しい操作手順があるかもしれません.
このテーマの要求は、ユーザーが入力するプログラムを作成してください:各容器の容量、開始状態、および要求される目標油量、プログラムは計算によって実現するステップを出力します(可能なすべての方法を見つける必要はありません).実現可能でない場合は、「不可能」と出力します.
例えば、ユーザ入力:12,8,5,12,0,0,6
ユーザが入力した最初の3つの数は容器容量(大きいから小さい)であり,次の3つの数は3つの容器の開始時の油量配置であり,最後の数は要求された油量(どの容器に入れてもよい)である.
プログラムは出力できます(答えは一意ではなく、操作の実行可能性のみを検証します):12,0,0 4,8,0 4,3,5 9,3,0 9,0,3,1,8,3,1,6,5
各行は1つの操作中の油量状態を表す.
注意:
よく調整してください.あなたのプログラムは正しい結果を実行できる時だけ得点する機会があります!すべてのクラスを同じファイルに书いて、デバッグしたら、【受験生フォルダ】の下にある问题番号の「解答.txt」に入れてください.関連する工事書類はコピーしないでください.パッケージ文は使用しないでください.ソースプログラムにはJDK 1しか現れない.5で許可されている構文または呼び出し.1.6以降は使用できません.