书上的题目我不会,就是瓶子倒酒
发表在C语言图书答疑 2010-09-17
是否精华
版块置顶:
我有一瓶12品脱酒瓶里面装满酒,现想将其倒为两个6品脱的酒,可是只有5品脱的酒瓶,和一个8品脱的酒瓶,问采取什么方案才能倒成功,用C语言来实现这一过程,且输出方案!
分享到:
精彩评论 1
蜡笔小新
学分:0 LV1
TA的每日心情
无聊
2023-02-13 19:27:34
2010-09-19
沙发
读者您好:
    问题分析与算法设计
   将12品脱酒 8品脱和5品脱的空瓶平分,可以抽象为解不定方程:
                  8x-5y=6
   其意义是:从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的酒向12品脱的瓶中倒y次,最后在12品脱的瓶中剩余6品脱的酒。
   用a,b,c代表12品脱、8品脱和5品脱的瓶子,求出不定方程的整数解,按照不定方程的意义则倒法为:
            a -> b -> c ->a
               x     y
   倒酒的规则如下:
   1) 按a -> b -> c ->a的顺序;
   2) b倒空后才能从a中取
   3) c装满后才能向a中倒
   按以上规则可以编写出程序如下:
*程序与程序注释
#include<stdio.h>
void getti(int a,int y,int z);
int i;                                            /*最后需要分出的重量*/
void main()
{
   int a,y,z; 
   printf("input Full a,Empty b,c,Get i:");      /*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的步骤*/
}
void getti(int a,int y,int z)                    /*a:满瓶的容量  y:第一个空瓶的容量  z:第二个空瓶的容量*/
{
   int b=0,c=0;                                  /* b:第一瓶实际的重量  c:第二瓶实际的重量*/
   printf("   a%d b%d c%d\n %4d%4d%4d\n",a,y,z,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(" %4d %4d %4d\n",a,b,c);
   }
}
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照