请选择 进入手机版 | 继续访问电脑版

智少年IT小达人_演武台

 找回密码
 立即注册
查看: 3978|回复: 0

趣味编程:分油趣题

[复制链接]
本站粉丝  发表于 2015-7-2 16:55:30 |阅读模式

    从大容器往外倒一定体积的液体也是中外古代数学家喜爱研究的一类问题,如下面这道厨师分油的趣题:    “有一位厨师要从盛12斤油的桶中倒出6斤油来,可是手边只有盛5斤油和盛8斤油的两个桶,问如何操作才能将6斤取出来呢?”
    我们首先用字母a,b,c代表12斤桶,8斤桶和5斤捅。规定倒油的顺序为:
  a->b->c->a
    并且必须符合如下规则:
1. b(8斤桶)倒空后才能从a(12斤桶)中取油。
2.c(5斤桶)盛满后才能向a(12斤捅)中倒油。
    我们设从a中往b倒油x次,从c往a倒油y次,那么最后a中剩下的油应该为12-
8x+6y斤,按照题意,我们得到如下方程,
  12-8x+6y=6:
    我们为了得到这个方程的解,应按照上述的倒油规则不断的倒下去,直到a中或b中油的重量为6斤为止,另外也可以改变倒油的规则,看能否找到最好的倒油步聚。

    代码:
#include<stdio.h>
int i;
main()
{   int a,y,z;
    printf("Input Full a ,Empty b,c,Get i:");  /*读入3个容器的容量和最后需要的数量*/
    scanf("%d%d%d",&a,&y,&z,&i);
    getti(a,y,z);
}
getti(int a,int y,int 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)      /*如果满足要求退出循环*/
    {   if(!b)           /*如果b为空,从a往b倒油*/
        {   a-=y;b=y;
        }
        else if(c==z)
        {   a+=z;c=0     /*如果c已满,从c往a倒油*/
        }
        else if(b>z-c)
        {   b-=(z-c);c=z;  /*如果b的重量大于c的剩余重量,倒满c*/
        }
        else
        {   c+=b;b=0;   /*否则将b中的油全部倒入c*/
        }
        printf("%4d%4d%4d\n",a,b,c);  
    }
}
回复

使用道具

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|智少年 ( 粤ICP备15046784号

GMT+8, 2022-10-1 10:02 , Processed in 0.110342 second(s), 17 queries .

© 2015-2018 深圳智少年教育咨询有限公司

快速回复 返回顶部 返回列表