李白打酒-----第五届蓝桥杯

来源:互联网 发布:java学完可以做什么 编辑:程序博客网 时间:2024/05/18 17:05

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

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

    无事街上走,提壶去打酒。

    逢店加一倍,遇花喝一斗。

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

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


public class 李白打酒 {public static void main(String[] args) {long start = System.currentTimeMillis();int sum = 1 << 15;int jiu = 2;int a, b;int count = 0;char c[] = new char[15];// 设0表示a,1表示bfor (int i = 1; i < sum; i++) {a = 0;b = 0;jiu = 2;for (int j = 0; j <= 14; j++) {// 最后一次一定遇到的花if (((i >> 14) & 1) == 0)break;int temp = (i >> j) & 1;if (temp == 0) {if (a >= 5)// 路过的次数有着严格的限制break;jiu = jiu * 2;a++;c[j] = 'a';} else if (temp == 1) {if (b >= 10)break;jiu--;b++;c[j] = 'b';}if (jiu < 0)// 酒的数量是不可能是负数的break;}if (jiu == 0 && a == 5 && b == 10) {count++;print(new String(c));}}print("可能的方案有:" + count + "种");long end = System.currentTimeMillis();print("此程序运行,花费的时间是" + ((end - start) / 1000.0) + "秒.");}public static void print(Object o) {System.out.println(o.toString());}}



结果:

ababbbbbabababb
abbabbabbbababb
baababbbbbababb
abbabbbaabbbabb
abbbaabbabbbabb
baabbabbabbbabb
babaababbbbbabb
abbabbbabaabbbb
abbbaabbbaabbbb
baabbabbbaabbbb
abbbabaabbabbbb
baabbbaabbabbbb
babaabbabbabbbb
bababaababbbbbb
可能的方案有:14种
此程序运行,花费的时间是0.009秒.

0 0
原创粉丝点击