#include "stdio.h"
/*换酒函数，递归调用*/
int  jiu(int p,int g)/*p为空瓶数，g为瓶盖数量*/
{
	int j;
   if(p>=2)/*有两个或两个以上空瓶（瓶盖先不考虑）*/
   {
       j=p/2;
printf("%d个空瓶换 %d瓶酒，空瓶数量变为 %d，瓶盖数量变为%d\n",p,j,(p%2)+j,g+j);
       p=(p%2)+j;
       g=g+j;
       return j+jiu(p,g);/*变为新的问题*/
   }
   else if(p==1)/*只有一个空瓶*/
   {
       j=1;
printf("借1个空瓶换 1瓶酒，空瓶数量变为 %d，瓶盖数量变为 %d\n",0,g+1);
        p=0;
        g=g+1;
        return j+jiu(p,g);/*变为新的问题*/
   }
   else if(g>=4)/*空瓶数为0 */
   {
      j=g/4;
printf("%d个瓶盖换 %d瓶酒，空瓶数量变为 %d，瓶盖数量变为 %d\n",g,j,p+j,(g%4)+j);
	  p=p+j;
	  g=(g%4)+j;
      return j+jiu(p,g);
   }
   else if(g==3)
   {
      j=1;
printf("借1盖换一瓶酒，喝酒后归还瓶盖，现在空瓶数量为 1，瓶盖数量为0\n");
      p=1;
      g=0;
      return j+jiu(p,g);
   }

   else if(g==2)
   {
       j=1;
printf("借两个瓶盖，换一瓶酒，喝后还 1 个瓶盖，此刻空瓶数量为 1，瓶盖数量为 -1\n");
       return j+jiu(1,-1);
   }
   else if(g==1 || g==0)
   {
       j=0;
printf("置换完毕，剩余瓶盖 %d 个\n",g);
       return 0;
   }
}

main()
{
   int q,j;
printf("请输入钱数:");
scanf("%d",&q);
   if(q%2==1)  
       q=q-1; 
   j=q/2;   
printf("%d元钱购买 %d瓶酒，得到空瓶 %d个，得到瓶盖 %d\n",q,q/2,q/2,q/2);
   j=j+jiu(q/2,q/2);
printf("\n%d元钱可以喝酒 %d 瓶\n",q,j);   
}
