蓝桥杯 算法练习 李白打酒
标题:李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。
//类似于暴力算法
#include <string> #include <vector> #include <algorithm> #include <iostream> #include <stdio.h> #include<time.h> #include<math.h> using namespace std; int main(int argc, char* argv[]) { // dian为1 hua为0 int no=2; //酒量 int time=0; int MAX=pow(2,14); for(int i=0;i<MAX;i++) { no=2; int a=5;//dian int b=9;//hua int ii=i; for(int j = 0; j < 14; j++) { if(no < 0) { break; } if(ii%2==0) { no--; b--; } else { a--; no*=2; } ii=ii>>1; if(a==0&&1==no&&0==b)//因为最后一次 是花 所以 剩余酒量为1 { time++; } } } cout<<time; cout << "\n " << clock() << endl; return 0; }