蓝桥杯_李白喝酒问题(回溯+暴力)

来源:互联网 发布:mac book怎么样 编辑:程序博客网 时间:2024/05/25 19:58
#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;}