#include<stdio.h>
#include<math.h>
int wine=2;
int shop=0;
int flower=0;
int count1=0;
int count2=0;
void traceback1(int t){
if(t==14){
if(wine==1&&shop==5&&flower==9){
count1++;
}
return ;
}
if(shop<5){
wine*=2;
shop++;
traceback1(t+1);
wine/=2;
shop--;
}
if(flower<9){
wine--;
flower++;
traceback1(t+1);
wine++;
flower--;
}
traceback1(t+1);
}
void traceback2(int shop,int flower){
if(shop==5&&flower==9){
if(wine==1){
count2++;
}
return ;
}
if(shop<5){
wine*=2;
traceback2(shop+1,flower);
wine/=2;
}
if(flower<9){
wine--;
traceback2(shop,flower+1);
wine++;
}
}
int main(){
traceback1(0);
traceback2(0,0);
printf("%d\n",count1);
printf("%d\n",count2);
int num;
int count=0;
int i,j;
for(num=0;num<pow(2,14);num++)
{
//二进制分解
flower=0; shop=0; wine=2;
j=num;
for(i=0;i<14;i++)
{
if(j%2==0){
flower++;
wine=wine-1;
}
else
{
shop++;
wine=wine*2;
}
j=j/2;
}
if(shop==5 && flower==9 && wine==1)
count++;
}
printf("the number is %d.\n",count);
return 0;
}
蓝桥杯_李白喝酒问题(回溯+暴力)
最新推荐文章于 2021-05-19 01:04:26 发布