李白打酒
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);
}
}
人生苦短,及时行乐

浙公网安备 33010602011771号