093.波瓦松的分酒趣题

简介: 093.波瓦松的分酒趣题
#include<stdio.h>
void getti(int a,int y,int z);
int i;           /*最后需要分出的重量*/
void main()
{
    int a,y,z;
    clrscr();
    puts("***************************************************************");
    puts("*  This program is to solve Problem of Poisson Beer Division. *");
    puts("* The Problem is as follows: Someone has a bottle of 12 pints *");
    puts("* beer. He wants to get 6 pints, but he does not has a bottle *");
    puts("* of 6 pints. He only has a bottle of 8 pints and a bottle of *");
    puts("* 5 pints. So how can he get 6 pints?                         *");
    puts("***************************************************************");
    printf(" >> Input Full bottle a,Empty b,c, and Get volumes:\n"); /*a 满瓶的容量  y:第一个空瓶的容量  z:第二个空瓶的容量*/
    printf(" >> ");
    scanf("%d%d%d%d",&a,&y,&z,&i);
    getti(a,y,z);           /*按a -> y -> z -> a的操作步骤*/
    /*getti(a,z,y);           /*按a -> z -> y -> a的步骤*/
    printf("\n Press any key to quit...");
    getch();
}
void getti(int a,int y,int z)   /*a:满瓶的容量  y:第一个空瓶的容量  z:第二个空瓶的容量*/
{
   int b=0,c=0,j=0;           /* b:第一瓶实际的重量  c:第二瓶实际的重量 j: 倒的步数*/
   puts(" >> The division steps are as follows.\n");
   printf(" Bottle:    a<%d> b<%d> c<%d>\n",a,y,z);
   printf("-----------------------------\n");
   printf(" Step No.|\n");
   printf("   <%d>   | %4d %4d %4d\n",j++,a,b,c);
   while(a!=i||b!=i&&c!=i)      /*当满瓶!=i或另两瓶都!=i*/
   {
      if(!b)
      {  a-=y; b=y;}    /*如果第一瓶为空,则将满瓶倒入第一瓶中*/
      else if(c==z)
      {  a+=z; c=0;}    /*如果第二瓶满,则将第二瓶倒入满瓶中*/
      else if(b>z-c)    /*如果第一瓶的重量>第二瓶的剩余空间*/
      { b-=(z-c);c=z;}    /*则将装满第二瓶,第一瓶中保留剩余部分*/
      else{ c+=b; b=0;}   /*否则,将第一瓶全部倒入第二瓶中*/
      printf("   <%d>   | %4d %4d %4d\n",j++,a,b,c);
   }
   printf("-----------------------------\n");
}
相关文章
|
4月前
【天梯赛】L1-095 分寝室
输出的方案对应女生都是 24/4=6 人间、男生都是 60/6=10 人间,人数差为 4。满足前三项要求的分配方案还有两种,即女生 6 间(都是 4 人间)、男生 4 间(都是 15 人间);同时,每间女寝人数必须都一样,每间男寝人数必须都一样,也就是女生总人数对女寝数取模为0,男生总人数对男寝数取模为0。输入在一行中给出 3 个正整数 n0​、n1​、n,分别对应女生人数、男生人数、寝室数。按题意模拟,因为知道总寝室数为n,所以可以从1~n-1暴力枚举女寝 i 的数量,那么男寝的数量则为 c-i。
62 6
|
5月前
1052 卖个萌 (20 分)//部分正确
1052 卖个萌 (20 分)//部分正确
|
5月前
1036 跟奥巴马一起编程 (15 分)
1036 跟奥巴马一起编程 (15 分)
|
6月前
7-35 情人节 (15 分)
7-35 情人节 (15 分)
56 0
L2-028 秀恩爱分得快 (25 分)
L2-028 秀恩爱分得快 (25 分)
154 0
天梯赛真题——7-6 老板的作息表(25 分)
新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了? 本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。
692 0
天梯赛真题——7-6 老板的作息表(25 分)
L1-079 天梯赛的善良 (20 分)
L1-079 天梯赛的善良 (20 分)
215 0
L1-035 情人节 (15 分)
L1-035 情人节 (15 分)
136 0
L1-035 情人节 (15 分)
|
安全
L3-009 长城 (30 分)(数学知识)
L3-009 长城 (30 分)(数学知识)
223 0
L3-009 长城 (30 分)(数学知识)
|
机器学习/深度学习 测试技术
PAT乙级1001 害死人不偿命的(3n+1)猜想 (15分)
PAT乙级1001 害死人不偿命的(3n+1)猜想 (15分)
85 0