A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

话说大诗人李白,一生好饮。幸好他从不开车。

    一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:

    无事街上走,提壶去打酒。
    逢店加一倍,遇花喝一斗。

    这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

    请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

17 个回复

倒序浏览
踩一下来来来
回复 使用道具 举报
这问题。。。。。。。。。。。我不会告诉你我不会的
回复 使用道具 举报
算术不好啊
回复 使用道具 举报
思路是,用一个变量存储次数,用控制语句筛选有符合要求的就+1,最后输出就行了
回复 使用道具 举报

真心不好做啊!!难
回复 使用道具 举报
oup 中级黑马 2015-11-14 21:45:05
7#
求大神来解答!
回复 使用道具 举报
额,标题是提问结束这是什么情况
回复 使用道具 举报
进来是看大神回复的
回复 使用道具 举报
0.0你是注定的超级黑马程序员,我看好你
回复 使用道具 举报
不知道啊 !!
回复 使用道具 举报
syb012 中级黑马 2015-11-24 22:24:44
12#
本帖最后由 syb012 于 2015-11-24 22:46 编辑

写完了,求大神们帮我检查一下


思路:
* 1、可以用所有15位数以内的二进制数来代替所有ab随机出现的情况
* 2、找出当中有5个a和10个b的情况,就是这个二进制数每个位置相加结果是5,其中用1代表a,0代表b
* 3、把不够15位的二进制字符串,在高位用0补齐
* 4、依次读取最后得到的字符串,遇到1,加倍,遇到0,减一。把最后结果是0的字符串放到一个集合中。
* 5、把二进制字符串中的1、0分别用a、b替换
import java.util.ArrayList;

public class Test_3 {

        public static void main(String[] args) {
               
                ArrayList<String> list=new ArrayList<String>();
                list=method_1(list);//算出有5个1和10和0的15位字符串放入一个集合中。
                list=method_2(list);//在前面的基础上算出最后位是0的所有字符串放入一个集合中
                list=method_3(list);//前面的基础上,算出所有遇'1'加倍遇'0'减1后结果是0的字符串,并放入一个集合中
                list=method_4(list);//把二进制字符串中的1、0分别用a、b替换,放到一个集合中
               
                System.out.println("所有可能方案的个数是"+list.size()+"个如下:");
                for(String s:list){
                        System.out.println(s);
                }

        }
        
        //把二进制字符串中的1、0分别用a、b替换,放到一个集合中
        private static ArrayList<String> method_4(ArrayList<String> list) {
                ArrayList<String> list2=new ArrayList<String>();
                for(String s:list){
                        s=s.replaceAll("1", "a");
                        s=s.replaceAll("0", "b");
                        list2.add(s);
                }
                return list2;
        }

        //前面的基础上,算出所有遇'1'加倍遇'0'减1后结果是0的字符串,并放入一个集合中
        private static ArrayList<String> method_3(ArrayList<String> list) {
                ArrayList<String> list2=new ArrayList<String>();
                for(String s:list){
                        int n=2;
                        char[] ch=s.toCharArray();
                        for(int i=0;i<15;i++){
                                if(ch=='1')
                                        n=n*2;
                                else
                                        n=n-1;                                
                        }
                        if(n==0)
                                list2.add(s);
                }
               
                return list2;
        }

        //在前面的基础上算出最后位是0的所有字符串放入一个集合中
        private static ArrayList<String> method_2(ArrayList<String> list) {
                ArrayList<String> list2=new ArrayList<String>();
                for(String s:list){
                        char[] ch=s.toCharArray();
                        if(ch[14]=='0')
                                list2.add(s);
                }
               
                return list2;
        }

        //算出有5个1和10和0的15位字符串放入一个集合中。
        private static ArrayList<String> method_1( ArrayList<String> list)
        {
                double d=Math.pow(2,15)-1;
                int x=(int) d;
                for(int i=0;i<=x;i++)
                {
                        String s=Integer.toBinaryString(i);
                        char[] ch=s.toCharArray();
                        int sum=0;
                        for(int j=0;j<ch.length;j++)
                        {
                                
                                sum+=ch[j]=='1'?1:0;
                        }
                        if(sum==5){
                                int len=s.length();
                                if(len<15)
                                {
                                        for(int g=0;g<15-len;g++)
                                        {
                                                s="0"+s;
                                        }                                       
                                }
                                list.add(s);                                
                        }
                                
                }
               
                return list;
        }


}



运行结果是:所有可能方案的个数是14个如下:
bababaababbbbbb
babaabbabbabbbb
babaababbbbbabb
baabbbaabbabbbb
baabbabbbaabbbb
baabbabbabbbabb
baababbbbbababb
abbbabaabbabbbb
abbbaabbbaabbbb
abbbaabbabbbabb
abbabbbabaabbbb
abbabbbaabbbabb
abbabbabbbababb
ababbbbbabababb

回复 使用道具 举报
public class Test6 {

        public static void main(String[] args) throws Exception {
                print(2, 5, 10, new StringBuilder());
        }
        public static void print(int wine,int shop,int flower,StringBuilder builder){
                if(wine==0&&shop==0&&flower==0&&builder.charAt(builder.length()-1)=='b'){
                        System.out.println(builder);
                }else if(shop<0||flower<0) {
                        return;
                }
                print(wine*2, shop-1, flower, builder.append('a'));
                builder.deleteCharAt(builder.length()-1);
                print(wine-1, shop, flower-1, builder.append('b'));
                builder.deleteCharAt(builder.length()-1);
        }
}
回复 使用道具 举报
syb012 发表于 2015-11-24 22:24
写完了,求大神们帮我检查一下

6666666666666
回复 使用道具 举报
都好厉害  学习一下
回复 使用道具 举报
这首诗可以的
回复 使用道具 举报
{:2_43:}  这题  哎
回复 使用道具 举报
一下子没看懂,收藏明天看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马