2014年蓝桥杯C/C++大学B组省赛真题(李白打酒)

题目描述:

题目描述
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

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

代码:

#include<iostream>
using namespace std;
int res;
void dfs(int count,int n1,int n2){
	//除去最后一次遇到花店,如果总共遇到了5次酒店,9次花店,而且最后还剩1斗酒,则答案加1,并返回 
	if(count==1&&n1==5&&n2==9){
		res++;
		return ;
	}
	//如果越界则返回 
	if(n1>5||n2>9)return ;
	//遇到酒店 
	dfs(count*2,n1+1,n2);
	//遇到花 
	dfs(count-1,n1,n2+1);
}
int main(){
	dfs(2,0,0);
	cout<<res<<endl;
	return 0;
}

posted @ 2022-03-16 15:19  回忆、少年  阅读(19)  评论(0编辑  收藏  举报  来源