泊松分酒 C

#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);}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值