泊松趣味数学题某人有12品脱的啤酒,想从中倒出6品脱,可他没-查字典问答网
分类选择

来自陈绵云的问题

  泊松趣味数学题某人有12品脱的啤酒,想从中倒出6品脱,可他没有6品脱的容器.只有1个8品脱的容器,和一个5品脱的容器.问怎没使8品脱的容器装满6品脱的啤酒.

  泊松趣味数学题

  某人有12品脱的啤酒,想从中倒出6品脱,可他没有6品脱的容器.只有1个8品脱的容器,和一个5品脱的容器.问怎没使8品脱的容器装满6品脱的啤酒.

1回答
2020-05-17 00:26
我要回答
请先登录
陆从德

  问题分析与算法设计

  将12品脱酒8品脱和5品脱的空瓶平分,可以抽象为解不定方程:

  8x-5y=6

  其意义是:从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的酒向12品脱的瓶中倒y次,最后在12品脱的瓶中剩余6品脱的酒.

  用a,b,c代表12品脱、8品脱和5品脱的瓶子,求出不定方程的整数解,按照不定方程的意义则倒法为:

  a->b->c->a

  xy

  倒酒的规则如下:

  1)按a->b->c->a的顺序;

  2)b倒空后才能从a中取

  3)c装满后才能向a中倒

  按以上规则可以编写出程序如下:

  *程序说明与注释

  #include

  voidgetti(inta,inty,intz);

  inti;/*最后需要分出的重量*/

  intmain()

  {

  inta,y,z;

  printf("inputFulla,Emptyb,c,Geti:");/*a满瓶的容量y:第一个空瓶的容量z:第二个空瓶的容量*/

  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的步骤*/

  }

  voidgetti(inta,inty,intz)/*a:满瓶的容量y:第一个空瓶的容量z:第二个空瓶的容量*/

  {

  intb=0,c=0;/*b:第一瓶实际的重量c:第二瓶实际的重量*/

  printf("a%db%dc%dn%4d%4d%4dn",a,y,z,a,b,c);

  while(a!=i||b!=i&&c!=i)/*当满瓶!=i或另两瓶都!=i*/

  {

  if(!b)

  {a-=y;b=y;}/*如果第一瓶为空,则将满瓶倒入第一瓶中*/

  elseif(c==z)

  {a+=z;c=0;}/*如果第二瓶满,则将第二瓶倒入满瓶中*/

  elseif(b>z-c)/*如果第一瓶的重量>第二瓶的剩余空间*/

  {b-=(z-c);c=z;}/*则将装满第二瓶,第一瓶中保留剩余部分*/

  else{c+=b;b=0;}/*否则,将第一瓶全部倒入第二瓶中*/

  printf("%4d%4d%4dn",a,b,c);

2020-05-17 00:28:44

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •