有两杯,一个11L一个7L,水任用,得到2L 的详细解法

问题:有两个水杯,一个是11L一个是7L,水可以随便用,怎么得到2L

1.了解问题的本质

问题中给出了两个杯子,只有这两个杯子有量度,所以只能让杯中的水满进满出才能确定杯子中最后有多少水。

现在问题要求通过两个杯子中水的倒进倒出,最后正好多出2L。

我们不难想到,想要得到这2L,有两种方式:

1》给11L装满,然后倒进7L,然后剩下的倒进7L,再给11L倒满……(简单说:从11L满进,从7L满出)

2》给7L装满,然后倒进11L,然后剩下的倒进11L,再给7L倒满……(简单说:从7L满进,从11L满出)

2.建立模型

1》假设11L满进了x次,7L满出了y次,则我们可以设立二元一次方程:

11x-7y=2

2》假设7L满进了x次,11L满出了y次,则我们可以设立二元一次方程:

7x-11y=2

3.求解方程的最优解

1》11x-7y=2

11 Mod 7  = 4

因为   2*4 Mod 7  = 1

所以   4*4 Mod 7 = 2

所以4*11  Mod 7 = 2

x = 4  ,y  =  (4* 11 - 2)/7 = 6

2》  同理可得:7x-11y=2      中   x=5  y =3

4.结合问题

1》11L满进倒入7L,7L满出,再倒入剩下的,11L再满进……

1》7L满进倒入11L,7L再满进,倒入11L满为止,11L再满出,再倒入剩下的,7L再满进……

5.总结

对于这一类问题,都可以采用以上的方式进行求解。谢谢!

时间: 2024-11-05 11:25:00

有两杯,一个11L一个7L,水任用,得到2L 的详细解法的相关文章

使用两个栈实现一个队列

使用两个栈Stack1和Stack2来实现一个队列.其中一个栈作为主存放数据的,另外一个栈作为临时存放数据的栈.具体操作如下: enqueue: 栈Stack1的入栈操作. dequeue:将Stack1中的元素一个一个地全部依次出栈,并且在Stack1出栈的同时把出栈的元素作为参数对Stack2进行入栈操作.这步完成之后,执行Stack2出栈操作,这时就将原先在Stack1中最先入栈的元素弹出.最后再将Stack2中的元素一个一个地全部依次出栈,填到Stack1中. 实现代码如下: /** *

用两个队列实现一个栈

前面说了用两个栈实现一个队列的算法,现在在写一个反过来的算法: 1.算法描述: 栈的特点就是先进后出,而队列的特点就是先进先出,基于两者的特点,有了此算法: 先看一张图:都喜欢图,图也能直接表达题的意思和本人的意思: 图中已经说的很清楚了,多余的方法暂且不说,按以上的图和思路,我给出以下代码:供自己参考: /* *设有两个队列A和B,栈的push操作,直接push到A的队尾就行了. *栈的pop操作时,将A中的队列依次取出放到B中,取到最后一个时, *最后一个不要放到B中,直接删掉,再将B中的值

用两个栈实现一个队列

用两个栈实现一个队列的功能 解析: 假设两个栈A和B,且都为空. 可以认为栈A提供入队列的功能,栈B提供出队列的功能. 入队列:入栈A. 出队列: 如果栈B不为空,直接弹出栈B的数据. 如果栈B为空,则依次弹出栈A的数据,放入栈B中,再弹出栈B的数据. 代码如下: #include<iostream> #include<stack> using namespace std; template<class T> struct MyQueue { void push(T &

java-57-用两个栈实现队列&amp;&amp;用两个队列实现一个栈

转自:http://bylijinnan.iteye.com/blog/1450125 ———————————————————————————————————————————— Java代码   import java.util.ArrayList; import java.util.List; import java.util.Stack; /* * Q 57 用两个栈实现队列 */ public class QueueImplementByTwoStacks { private Stack<

zeromq中两个dealer 通过一个router进行通信

发现有童鞋不是很清楚ZMQ中的“请求-回复”模式中的ROUTER怎么用,所以简单介绍一下“请求-回复”模式的使用(最后付代码). 一.讲一讲 1.要使用zmq 通过一个router进行通信,你首先需要知道ZMQ中的“请求-回复”模式,不清楚的话可以先看一下下面这篇文章,连接如下: http://www.cnblogs.com/fengbohello/p/4354989.html 在“请求-回复”模式中,router是一个比较特殊的 socket类型,它会把它接收到的第一个消息作为消息来源的标志,

两个栈实现一个队列

问题描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解法分析: 首先题目要求用两个栈实现一个队列,那么就要先分析为什么这么做.队列的特点就像排队的"先到先得"一样,即先入队的就先出队:而栈则正好相反,特点是"后进先出",那么问题来了怎么用"后进先出"的得到"先进先出"? 传说中最简单通用但效率不高的方法(其实我还真没想到这么做)是,入队的时候用stack1来存储,当出队的时候,先把

剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的.push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,直到剩下最后一个元素,这个元素就是要出栈的元素(最后添加到队列中的元素). 1

web前端面试系列 - 数据结构(两个栈模拟一个队列)

一. 用两个栈模拟一个队列 思路一: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时将数据压人s1 3. 出队时将s1弹出,并压人s2,然后弹出s2中的顶部数据,最后再将剩余数据弹出s2,并压人s1. 思路二: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时,判断s1, 是否为空,如果不为空,则将数据直接压入s1, 如果为空,则将s2中的数据全部倒入s1,在将数据压人s1. 3. 出队时,判断s2, 是否为空,如果不为空,则直接弹出s2

两个栈实现一个队列,两个队列实现一个栈

1.两个栈实现一个队列 有三种思路: 思路一:将stack1作为存储空间,将stack2作为临时缓冲区,入队时,直接压入stac1,出队时,将stack1中的元素依次出栈压入stack2中,再将stack2的栈顶元素弹出,最后将stack2中的元素再倒回给stack1 思路二:入队时,判断stack1是否为空,如果stack1为空,则将stack2中的所有元素都倒入stack1中,再将元素直接压入stack1,否则,直接压入stack1中 出队时,判断stack2是否为空,如果stack2为空,