李白打酒

public class 李白打酒 {
	// ********************李白打酒*****************
	// 李白壶里有2斗酒,遇到店,壶里的酒量就*2,遇到花就-1;已知遇到5个店,10朵花,最后遇到花
	// 求有多少种排列。
	static int n = 0;
	static int[] a = new int[15];
/**
 * 
 * @param sum 酒的总量
 * @param k	还差几次没有遇到花或店
 * @param d	店
 * @param h	花
 */
	public static void f(int sum, int k, int d, int h) {
		if (sum < 0 || k < 0 || sum <= 0 && k > 0)
			return;
		if (sum == 0 && k == 0 && d == 5 && h == 10) {
			n++;
			System.out.print("n:" + n + "  ");
			for (int i = 0; i < a.length; i++) {
				System.out.print(a[i]);
			}
			System.out.println();
			return;
		}
		if (k == 0)
			return;

		a[a.length - k] = 2;//2代表遇到店
		f(sum * 2, k - 1, d + 1, h);
		a[a.length - k] = 1;//遇到花

		f(sum - 1, k - 1, d, h + 1);
	}

	public static void main(String[] args) {

		f(2, 15, 0, 0);

	}
}

  

posted @ 2020-03-04 18:44  浪~子  阅读(167)  评论(0编辑  收藏  举报