#include<stdio.h>
int i,n;
int probo(int a,int bv,int cv){
int n=0,b=0,c=0;
while(!(a==i||b==i||c==i)){
if(!b)
if(a<bv) { n=-1;break; }
else{ a-=bv,b=bv; }
else if(c==cv){ a+=cv;c=0; }
else if(b+cv==i){ a-=cv-c;c=cv; }
else if(b>cv-c){ b-=(cv-c);c=cv; }
else {c+=b;b=0; }
n++;
}
return(n);
}
void practice(int a,int bv,int cv){
int b=0,c=0,x=0;
printf("平分酒的分法:\n");
printf("酒瓶%d 空杯%d 空杯%d\n",a,bv,cv);
printf(" %6d %6d %6d\n",a,b,c);
while(!(a==i||b==i||c==i)){
if(!b) { a-=bv;b=bv; }
else if(c==cv){ a+=cv;c=0; }
else if(b+cv==i){ a-=cv-c;c=cv; }
else if(b>cv-c){ b-=(cv-c);c=cv; }
else { c+=b;b=0; }
x++;
printf("%3d:%6d%6d%6d\n",x,a,b,c);
}
printf("平分酒共分倒%d次.\n",n);
}
int main()
{
int a,bv,cv,m1,m2;
printf("\n请输入酒总量(偶数):");scanf("%d",&a);
printf("两空杯容量bv,cv分别为:");
scanf("%d,%d",&bv,&cv);
i=a/2;
if(bv+cv<i)
{ printf("空标容量太小,无法平分!\n");return 0; }
m1=probo(a,bv,cv); m2=probo(a,cv,bv);
if(m1<0 && m2<0)
printf("无法平分!");
if(m1>0 && (m2<0||m1<m2))
{ n=m1;practice(a,bv,cv); }
if(m2>0 && (m1<0||m2<m1))
{ n=m2;practice(a,cv,bv);}
}
泊松分酒 C
最新推荐文章于 2021-12-24 14:47:20 发布