- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)