波松瓦的分酒趣题(源程序、流程图).doc

波松瓦的分酒趣题(源程序、流程图).doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
波松瓦的分酒趣题(源程序、流程图)

摘要: 波松瓦的分酒趣题 法国著名数学家波瓦松在青年时代研究过一个有趣的数学问题:某人有12品脱的啤酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,仅有一个8品脱和5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?用函数方法实现。 【编程提示】 将12品脱酒用8品脱和5品脱的空瓶平分,可以抽象为解不定方程: ????????????????? 8x-5y=6 其意义是:从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的酒向12品脱的瓶中倒y次,最后在12品脱的瓶中剩余6品脱的酒。 用a,b,c代表12品脱、8品脱和5品脱的瓶子,求出不定方程的整数解,按照不定方程的意义则倒法为: ??????????? a b ca?? 倒酒的规则如下: 1) 按a - b - c -a的顺序; 2) b倒空后才能从a中取 3) c装满后才能向a中倒 流程图: 源程序 #include stdio.h void Pourer(int a,int y,int z) /*a:满瓶的容量 y:第一个空瓶的容量 z:第二个空瓶的容量*/ { int b=0,c=0,i=6;/* b:第一瓶实际的盛酒量 c:第二瓶实际的盛酒量*/ printf(倒酒的过程如下:(a,b,c下面的数字分别表示当前瓶内的酒量)\n\n); printf( a(%d) b(%d) c(%d)\n %4d %4d %4d\n,a,y,z,a,b,c); while(a!=i||b!=ic!=i) /*当满瓶!=i 或另两瓶都!=i*/ { if(!b) { a-=y; b=y; } /*如果第一瓶为空,则将满瓶倒入第一瓶中*/ else if(c==z) { a+=z; c=0;} /*如果第二瓶满,则将第二瓶倒入满瓶中*/ else if(bz-c)/*如果第一瓶的重量第二瓶的剩余空间*/ { b-=(z-c); c=z; } /*则将装满第二瓶,第一瓶中保留剩余部分*/ else { c+=b; b=0; } /*否则,将第一瓶全部倒入第二瓶中*/ printf( %4d %4d %4d\n,a,b,c); } } void main() { int a,b,c; a=12;b=8;c=5;/*a 代表盛酒瓶容量;b和c代表空瓶容量*/ Pourer(a,b,c); /*按 a - b - c - a 的操作步骤*/ } 开始 输入三瓶酒a,b,c的容量分别是12,8,5 a为满瓶,b,c为空瓶 将a倒入b瓶中,b瓶倒满 用b瓶将c倒满 将倒满后的c瓶再倒回a瓶中 a瓶的重量是否大于b瓶的剩余空间? 将a瓶全部装入b瓶中 是否有瓶里的量为6? 输出a,b,c瓶的容量情况 结束 Y N Y N

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档