2014蓝桥杯本科B组C/C++第三题【李白打酒】

来源:互联网 发布:ectouch2.0源码分享 编辑:程序博客网 时间:2024/05/28 05:17


    标题:李白打酒


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


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


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


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


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


    注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。

可以直接搜索求解:



#include <cstdio>#include<iostream>using namespace std;int total=0;void dfs(int n,int m,int jiu){    if(n>5||m>10)    {        return;    }    if((n<5&&jiu<=0)||(m<10&&jiu<=0))    {        return;    }    if(n==5&&m==10&&jiu==0)    {        total++;    }    dfs(n+1,m,jiu*2);    dfs(n,m+1,jiu-1);}int main(){    int a,b,sum;    dfs(0,0,2);    cout<<total<<endl;    return 0;}


或者递归求解。


#include <cstdio>using namespace std;int sum = 0;char str[100];int Fun(int now, int i, int a, int b){if(now < 0 || i > 16 || (now == 0 && i < 16))return 0;if(now == 0){if(i == 16 && a == 5 && b == 10){sum++;for(int j = 0; j < 15; j++)putchar(str[j]);putchar(10);}}str[i - 1] = 'a';Fun(now * 2, i + 1, a + 1, b);str[i - 1] = 'b';Fun(now - 1, i + 1, a, b + 1);}int main(){str[15] = '\0';Fun(2, 1, 0, 0);printf("sum = %d\n", sum);return 0;}











0 0
原创粉丝点击