标题:李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒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);
}