您的位置:首页 > 编程语言 > C语言/C++

李白打酒-第五届蓝桥杯c/c++B组

2018-03-25 08:56 246 查看
标题:李白打酒

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

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

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

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

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

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

题解:我用了两种方法,一种递归,一种直接暴力枚举。

代码:///递归;
#include<stdio.h>
int sum=0;

void dfs(int hua,int d,int j)
{
if(hua==9&&d==5&&j==1)
{
sum++;
return ;
}
if(j<=0)return ;

if(hua>9||d>5)return ;
dfs(hua+1,d,j-1);
dfs(hua,d+1,j*2);
}

int main()
{
dfs(0,0,2);
printf("%d\n",sum);
}
///暴力枚举;
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,l,g,h,num,sum=0;
int lu[14]={0};
for(i=0;i<10;i++)
for(j=i+1;j<11;j++)
for(k=j+1;k<12;k++)
for(l=k+1;l<13;l++)
for(g=l+1;g<14;g++)
{
memset(lu,0,sizeof(lu));
num=2;
lu[i]=lu[j]=lu[k]=lu[l]=lu[g]=1;
for(h=0;h<14;h++)
{
if(lu[h]==1)num=num*2;
else num=num-1;
}
if(num==1)
sum++;
}
printf("%d\n",sum);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: