答案:14
方式一:记录所有方案,并打印输出所有情况
public class Main { private static char[] a = new char[16]; private static int ans; //递归的思想 /** * jiu:酒壶中的斗数,dian:是遇见的店数,hua:是碰到花次数,c表示'a'或'b'分别表示遇到店与花 */ public static void fun(int doushu,int dian,int hua,char c){ //不符合情况的结束 if(doushu<0||dian>5||hua>10) return; a[dian+hua] = c; //符合情况进行计数 if(doushu == 0 && dian == 5 && hua == 10 && c=='b'){ ans++; System.out.println(Arrays.toString(a)); return; } //遇到店的情况 fun(doushu*2, dian+1, hua, 'a'); //遇到花的情况 fun(doushu-1, dian, hua+1, 'b'); } public static void main(String[] args) { fun(2,0,0,' '); System.out.println(ans); } }方式二:直接来求得情况数,打印输出
public class Main { //表示情况数 private static int ans; public static void main(String[] args) { //初始设置遇见花是9次,是因为题目说最后遇见的是花,用于找出口 fun(5, 9, 2); System.out.println(ans); } private static void fun(int dian,int hua,int jiu){ //符合最后情况的ans进行累加 这里hua=0 jiu=1是遇见花前一次的状态,这里作为出口 if(dian == 0 && hua==0 && jiu==1 ) ans++; //如果遇见店以及花次数大于0,进行往下递归 if(dian>0){ fun(dian-1, hua, jiu*2); } if(hua>0){ fun(dian, hua-1, jiu-1); } } }我是长路,感谢您的收看。 欢迎关注我的公众号:长路Java,其中会包含软件安装等其他一些资料,包含一些视频教程以及学习路径分享。 qq群:891507813 我们可以一起探讨学习