蓝桥杯题——李白打酒

话说大诗人李白,一生好饮。幸好他从不开车。
 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:

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

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

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

1.把a可以看做是1,把b可以看做是0。所以最大是111110000000000,最小是000000000011111。

2,把这些15位的二进制,转换成十进制。反过来在代码中用十进制转换成二进制就可以得到所有情况。

3,按要求把符合的输出。

#include <iostream.h>
int art[15];
int sum;

void fun(long aa)//把十进制转换成二进制
{
int f = 0;

while(aa!=0)
{
art[f] = aa%2;
sum += art[f];
aa = aa/2;
f++;
}
}
void main()
{
long t ;

for(t=15768;t<30768;t++)
{
int Li = 2;//最初的两斗酒
sum = 0;
fun(t);
if(sum==5)
{
for(int i=14;i>0;i--)
{
if(art[i] == 0)
{

Li = Li-1;
}
else
{
Li = Li*2;
}
if(Li<0)
{
break;
}


}

if(Li==1)
{
for(i=14;i>=0;i--)
{
if(art[i] == 1)
cout<<'a';
else
cout<<'b';
}
cout<<endl;
}

}

}

}

结果

abbbabaabbabbbb
abbbaabbbaabbbb
abbbaabbabbbabb
abbbaaabbbbbbba
abbabbbabaabbbb
abbabbbaabbbabb
abbabbabbbababb
abbabbababbbbba
abbababbbbabbba
abbaabbbbbbbaba
ababbbbbabababb
ababbbbabbabbba
ababbbabbbbbaba
aabbbbbbbaabbba
aabbbbbbabbbaba

猜你喜欢

转载自www.cnblogs.com/zkw123/p/10392158.html
今日推荐