------文章底部代码分享
一、题目
标题:李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。
则:babaabbabbabbbb就是合理的次序。
像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)
注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。
二、解题
2.1
在主类定义一个渠全局变量用于方案计数 ;
2.2
编辑一个方法,将酒壶中酒的量、遇店次数、遇花次数传入;
设置两种递归,一种是遇店情况下,一种是遇花情况下;
2.3
设置结束条件,返回有两种情况,一种是超出范围、一种是满足条件;
因为最后一次遇见花才喝完酒,故遇花次数为 9 时,酒余量为 1 时满足条件,而遇店超出 5 和遇花超出 9 都是超出范围;
( 如果设置为遇花 == 10 ,酒余量 == 0 ,则可能在最后一次之前,酒余量就已经为 0 了,例如遇花 2 次,酒余量为 0 ,其余 8 次遇花、5 次遇店随意排列都满足情况 )
2.4
调用方法结束后 输出最后得到的方案数即可;
三、代码分享
public class Main {
static int count ;
public static void main(String[] args) {
countNums( 2 , 0 , 0 );
System.out.println( count );
}
public static void countNums( int part , int shopNums , int flowerNums ){
if ( shopNums > 5 || flowerNums > 9 )
return;
if ( shopNums == 5 && flowerNums == 9 && part == 1 ){
count++;
return;
}
countNums( 2 * part , shopNums + 1 , flowerNums );
countNums( part - 1 , shopNums , flowerNums + 1 );
}
}