黑马程序员技术交流社区
标题:
遇到这样的题我也是醉了!!! 求解答过程啊
[打印本页]
作者:
杨凯瑞
时间:
2015-11-13 19:57
标题:
遇到这样的题我也是醉了!!! 求解答过程啊
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
作者:
wx_Cr3Z7mRM
时间:
2015-11-13 20:06
踩一下来来来
作者:
田浩然
时间:
2015-11-13 20:36
这问题。。。。。。。。。。。我不会告诉你我不会的
作者:
还不够
时间:
2015-11-13 20:41
算术不好啊
作者:
你是对的
时间:
2015-11-13 21:55
思路是,用一个变量存储次数,用控制语句筛选有符合要求的就+1,最后输出就行了
作者:
杨凯瑞
时间:
2015-11-14 21:28
还不够 发表于 2015-11-13 20:41
算术不好啊
真心不好做啊!!难
作者:
oup
时间:
2015-11-14 21:45
求大神来解答!
作者:
轻寒漠漠
时间:
2015-11-14 22:13
额,标题是提问结束这是什么情况
作者:
醉叶惜秋
时间:
2015-11-14 22:31
进来是看大神回复的
作者:
geqiandesiyu
时间:
2015-11-15 00:06
0.0你是注定的超级黑马程序员,我看好你
作者:
253186803
时间:
2015-11-15 00:18
不知道啊 !!
作者:
syb012
时间:
2015-11-24 22:24
本帖最后由 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
作者:
olivec
时间:
2016-1-29 16:24
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);
}
}
作者:
洋葱头头
时间:
2016-1-29 16:49
syb012 发表于 2015-11-24 22:24
写完了,求大神们帮我检查一下
6666666666666
作者:
悠悠天下
时间:
2016-1-29 21:49
都好厉害 学习一下
作者:
梁志斌
时间:
2016-1-31 00:08
这首诗可以的
作者:
yi651312197
时间:
2016-1-31 22:34
{:2_43:} 这题 哎
作者:
Mayer
时间:
2016-2-1 23:54
一下子没看懂,收藏明天看
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2