李白打酒(蓝桥杯2014)

    李白打酒(蓝桥杯2014)

1.题目描述:

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

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

无事街上走,提壶去打酒。 
逢店加一倍,遇花喝一斗。 
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

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

2.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
//不需要打印每个具体方案,只给出一共多少方案。
int fun(int store,int flower,int wine)
{
if(store>5 || flower>10)
return 0;
else if(store==5 && flower==9 && wine==1)
{
return 1;
}
int re=0;
re+=fun(store+1,flower,wine*2);
re+=fun(store,flower+1,wine-1);
return re;
}

//打印每个具体方案,并给出一共多少方案
int fun(int store,int flower,int wine, char *str)
{
if(store>5 || flower>10)
return 0;
else if(store==5 && flower==9 && wine==1)
{
printf("%sb\n",str);
return 1;
}
int re=0,len=strlen(str);
char *p=(char *)malloc((len+2)*sizeof(char));
strcpy(p,str);
strcat(p,"a");
re+=fun(store+1,flower,wine*2,p);
strcpy(p,str);
strcat(p,"b");
re+=fun(store,flower+1,wine-1,p);
if(p) free(p);
return re;
}
int main()
{
printf("一共%d个方案\n\n",fun(0,0,2));
printf("一共%d个方案\n",fun(0,0,2,""));
return 0;
}

3.总结:用递归的思想做,题中将酒量的变化分为两类:第一,是遇见店乘2;第二,是遇见花减1.

两种情况的递归计算!

时间: 2024-09-30 23:27:39

李白打酒(蓝桥杯2014)的相关文章

蓝桥杯 2014本科C++ B组 李白打酒 三种实现方法 枚举/递归

标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的). 注意:通过浏览器提交答案.答案是个整数.不要书写任何多

蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举

蓝桥杯 枚举 奇怪的分式 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子.分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的). 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式. 但对于分子分母相同的情况

蓝桥杯 2014本科C++ B组 六角填数 枚举排列

标题:六角填数 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 简单的枚举排列,只要提前将12个结点标号,来判断六个线段总和是否相等. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define MAXN 13 5 int num

蓝桥杯 2014本科C++ B组 地宫取宝 DFS+记忆化搜索

历届试题 地宫取宝   时间限制:1.0s   内存限制:256.0MB 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不

2014蓝桥杯——李白打酒

标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的). 注意:通过浏览器提交答案.答案是个整数.不要书写任何多

2014年第五届蓝桥杯试题C/C++程序设计B组——李白打酒

题目描述: 标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的). 注意:通过浏览器提交答案.答案是个整数.不

蓝桥杯:李白打酒

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} 蓝桥杯:李白打酒 标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗.

蓝桥杯——真题训练之李白打酒

标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案? public class Main{ public static void m

蓝桥杯——李白打酒(正式版)

看了很多人对于此题的解题报告,对于他们的代码风格,我实在无法忍受,网上的代码大都是暴力求解--枚举,我自觉很无脑,但我得说,这是很简单的方法.我尽量优化了速度和代码可读性,原来的代码运行速度为(1 5 10)-- 3.5秒改进后变为2秒左右,暂时只能想到这些了,其他优化方法没有想到,暂时就先以此出为正式版,估计以后不会有很多改进,如果有更好的方法,可在下评论,我会及时整理 /× 2507: 李白打酒 Description 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来