蓝桥杯2014年省赛JavaC组李白打酒

简介: 蓝桥杯2014年省赛JavaC组李白打酒

题目描述


标题:李白打酒
    话说大诗人李白,一生好饮。幸好他从不开车。
    一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
    无事街上走,提壶去打酒。
    逢店加一倍,遇花喝一斗。
    这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 
    请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
    注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。


代码演示(两种)


答案: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);
        }
    }
}


相关文章
|
6月前
第十四届蓝桥杯集训——JavaC组第十三篇——for循环
第十四届蓝桥杯集训——JavaC组第十三篇——for循环
61 0
|
6月前
|
算法
第十四届蓝桥杯集训——JavaC组第十二篇——while循环(循环四要素)
第十四届蓝桥杯集训——JavaC组第十二篇——while循环(循环四要素)
67 0
|
6月前
|
存储 Java 大数据
第十四届蓝桥杯集训——JavaC组第三篇——常量与变量(八种基本数据类型)
第十四届蓝桥杯集训——JavaC组第三篇——常量与变量(八种基本数据类型)
63 0
|
6月前
|
Java Linux
第十四届蓝桥杯集训——JavaC组首篇——环境搭建(win11)
第十四届蓝桥杯集训——JavaC组首篇——环境搭建(win11)
115 0
|
6月前
|
Java C语言
第十四届蓝桥杯集训——JavaC组第十四篇——嵌套循环
第十四届蓝桥杯集训——JavaC组第十四篇——嵌套循环
61 0
|
6月前
|
C语言
第十四届蓝桥杯集训——JavaC组第十一篇——switch
第十四届蓝桥杯集训——JavaC组第十一篇——switch
53 0
|
6月前
第十四届蓝桥杯集训——JavaC组第十篇——分支语句
第十四届蓝桥杯集训——JavaC组第十篇——分支语句
48 0
|
6月前
|
算法
第十四届蓝桥杯集训——JavaC组第九篇——三元运算符
第十四届蓝桥杯集训——JavaC组第九篇——三元运算符
51 0
|
6月前
第十四届蓝桥杯集训——JavaC组第九篇——位运算符
第十四届蓝桥杯集训——JavaC组第九篇——位运算符
47 0
|
6月前
第十四届蓝桥杯集训——JavaC组第八篇——进制转换
第十四届蓝桥杯集训——JavaC组第八篇——进制转换
67 0