标题:求助:10L的瓶子装满水,再给你一个3L,一个7L的瓶子,分出2个5L的水!
只看楼主
chen_study
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-8-31
结帖率:100%
已结贴  问题点数:20 回复次数:21 
求助:10L的瓶子装满水,再给你一个3L,一个7L的瓶子,分出2个5L的水!
如题,手动分,我分得出来!
A为10L的瓶子,B为3L的瓶子,C为7L的瓶子:
A   B  C
10  0  0
3   0  7
3   3  4
6   0  4
6   3  1
9   0  1
9   1  0
2   1  7
2   3  5
5   0  5
这是手动倒得过程,用C++我想了半天不知道怎么写这个循环!
哪位大侠帮忙解决下!
不胜感激!
搜索更多相关主题的帖子: 瓶子 分出 
2009-09-08 08:21
wqa007
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2009-6-24
得分:0 
能不能把你的要求说具体点?是不是要求三个变量先赋初值。然后写小段程序 最后输出三个变量的值。使变量值满足要求?
2009-09-08 10:40
chen_study
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-8-31
得分:0 
程序功能是,知道有3个瓶子,分别为10L 3L 7L
开始的时候,10L的装满水,3L和7L的空的.
最后的结果要分成2个5L,分别装入2个瓶子.
程序要求输出倒水的过程,过程中,各个瓶子中的水的量..
3个变量,为3个瓶子当前的水的量,,但每个变量又有界限!
我想弄个循环,就是弄不出来,帮帮忙!!
2009-09-08 14:49
chen_study
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-8-31
得分:0 
头绪是这样的
把3个瓶子由大到小从左到右排好



从左到右倒过去(单次倒水结束标志:倒出的瓶子空了或装进的瓶子满了)
循环至最右边的瓶子时,跳回至最左边的瓶子

整个循环的标志:3个瓶子中出现一个为5L的

整个程序最后一步:把另外2个瓶子里的果汁倒进一个瓶子中(容量大的那个)

伪代码我自己写出来,我自己都看不大明白

我是这样分析的,可我不知道怎么用C++代码来实现这个循环
谁帮忙处理下,我都搞了好久了!晕啊
2009-09-08 18:01
kqscy1
Rank: 2
等 级:论坛游民
帖 子:17
专家分:81
注 册:2009-9-3
得分:0 
会VC++么,MFC会的话可以写;定义4个变量3个代表3个瓶子,1个就作为临时存水用。做3个注入水的菜单,和3个抽取水的菜单。然后根据代表3个瓶子的变量画出瓶子当前的状态
2009-09-08 18:14
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
三个数按照一定的规律相加为10,只要有一个数为5就结束。。呵呵

学习需要安静。。海盗要重新来过。。
2009-09-08 20:02
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
回复 6楼 sunkaidong
???

我就是真命天子,顺我者生,逆我者死!
2009-09-08 20:13
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
得分:0 
这道题里有个规律:

 
第一步:当中间数b为0,就要使这三个数中间为3,把最后一个数c分最大给b。如果最后一个数c不够,就要
就要用第一个数a来最大补给最后一个数c,然后最后一个数c再给第二个数b.
 
第二步:当中间数b为3,就要使这三个数中间一个为0,把b付给a,察看两边a,c相等,不等继续循环第一步.
 
第一次:
3 0 7 假如a!=c;为了使中间数b不为0,只有c->b,结果3,3,4(if(b=0&&c>b) b=3;c=c-3;)
                                                     为何这里写c>b请看第五次
第二次:
3 3 4  当中间数b不为0,只有b->a,结果6,0,4  察看两边a,c相等,不等就(if(b!=0) a=a+3;b=0;)
第三次:
6 0 4  假如a!=c;为了使中间数b不为0,只有c->b,只有6,3,1(if(b=0&&c>b) b=3;c=c-3;)
第四次:
6 3 1  当中间数b不为0,只有b->a,结果9,0,1 察看两边a,c相等,不等就(if(b!=0) a=a+3;b=0;)
第五次:
9 0 1 当中间数b不为0,只有c->b,但是c全给了b后c为0了,a就要补足c.
                               结果:2,1,7(if(b=0&&c<=b) b=c;c=7;a-=7;)
 
第六次:
2 1 7 这时候,c被a补足了后继续补给b让b=3.
第七次:
2 3 5  当中间数b不为0,只有b->a,结果5,0,5  察看两边a,c相等,最后a,c平衡.
 
 
 
这3个数字好像告诉我们,2个人平分一笔钱,但两个人都不知道对方有多少钱,
请第三个人来做公证人,把钱给平分了.当然第三个人每次拿到的钱都小于2家原有的钱,
然后分阿分得,就平了.
2009-09-08 22:18
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
得分:0 
写的太快,有个地方错了,现在更正。
第一次:  
3 0 7 假如a!=c;为了使中间数b不为0,只有c->b,结果3,3,4(if(b=0&&c>3) b=3;c=c-3;)  // 这里3是因为中间瓶子为3L
                                                     为何这里写c>b请看第五次  
第二次:  
3 3 4  当中间数b不为0,只有b->a,结果6,0,4  察看两边a,c相等,不等就(if(b!=0) a=a+3;b=0;)  
第三次:  
6 0 4  假如a!=c;为了使中间数b不为0,只有c->b,只有6,3,1(if(b=0&&c>3) b=3;c=c-3;)  
第四次:  
6 3 1  当中间数b不为0,只有b->a,结果9,0,1 察看两边a,c相等,不等就(if(b!=0) a=a+3;b=0;)  
第五次:  
9 0 1 当中间数b不为0,只有c->b,但是c全给了b后c为0了,a就要补足c.  
                               结果:2,1,7(if(b=0&&c<=3) b=c;c=7;a-=7;)  
 
第六次:  
2 1 7 这时候,c被a补足了后继续补给b让b=3.  
第七次:  
2 3 5  当中间数b不为0,只有b->a,结果5,0,5  察看两边a,c相等,最后a,c平衡.  
2009-09-08 22:51
chen_study
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-8-31
得分:0 
条件控制我看明白了,,谢谢

现在还一个问题想请教下,这个变量定义跟初始化要怎么弄呢,

初始化我觉得是按题目给的初始化为 10 0 0


不过他们又有上限,我不知道怎么控制定义

麻烦了!


2009-09-09 08:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-285091-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.103340 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved