老师布置的分酒问题,求C语言或MATLAB程序,跪求大佬解答

老师布置的分酒问题,求C语言或MATLAB程序,跪求大佬解答,第1张

#include<stdio.h>

int i

void getti(int a,int y,int z)

 

int main()

{

int a,y,z

printf("input full a, empty b,c,get i:")

scanf("%d%d%d%d",&a,&y,&z,&i)

getti(a,y,z)

getti(a,y,z)

return 0

}

void getti(int a,int y,int z)

{

int b=0,c=0

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)) {

if(!b)

{ a-=yb=y }

else if(c==z)

{ a+=zc=0 }

else if(b>z-c)

{

b-=(z-c)c=z

}

else {  c+=bb=0  }

printf("%4d%4d%4d\n",a,b,c)

}

}

5-->83 0 5

3-->50 3 5

8-->33 3 2

3-->51 5 2

5-->81 0 7

3-->50 1 7

8-->33 1 4

5-->34 0 4

给,

详细的算法分析,以及源代码和注释:

问题分析与算法设计

将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-=yb=y}/*如果第一瓶为空,则将满瓶倒入第一瓶中*/

else if(c==z)

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

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

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

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

printf(" %4d %4d %4d\n",a,b,c)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8010926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存