365. Water and Jug Problem 水和桶
来源:互联网 发布:jsp写javascript代码 编辑:程序博客网 时间:2024/05/02 04:39
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine whether it is possible to measure exactly z litres using these two jugs.
If z liters of water is measurable, you must have z liters of water contained within one or both buckets by the end.
Operations allowed:
- Fill any of the jugs completely with water.
- Empty any of the jugs.
- Pour water from one jug into another till the other jug is completely full or the first jug itself is empty.
Example 1: (From the famous "Die Hard" example)
Input: x = 3, y = 5, z = 4Output: True
Example 2:
Input: x = 2, y = 6, z = 5Output: False
这道题不会,所以题解和答案都是看别人的
题解:
这是一道脑筋急转弯题,我想很多人以前应该听过这道题目,有一个容量为3升和一个容量为5升的水罐,问我们如何准确的称出4升的水。我想很多人都知道怎么做,先把5升水罐装满水,倒到3升水罐里,这时5升水罐里还有2升水,然后把3升水罐里的水都倒掉,把5升水罐中的2升水倒入3升水罐中,这时候把5升水罐解满,然后往此时有2升水的3升水罐里倒水,这样5升水罐倒出1升后还剩4升即为所求。这个很多人都知道,但是这道题随意给我们了三个参数,问有没有解法,这就比较难了。这里我就照搬网上大神的讲解吧:
这道问题其实可以转换为有一个很大的容器,我们有两个杯子,容量分别为x和y,问我们通过用两个杯子往里倒水,和往出舀水,问能不能使容器中的水刚好为z升。那么我们可以用一个公式来表达:
z = m * x + n * y
其中m,n为舀水和倒水的次数,正数表示往里舀水,负数表示往外倒水,那么题目中的例子可以写成: 4 = (-2) * 3 + 2 * 5,即3升的水罐往外倒了两次水,5升水罐往里舀了两次水。那么问题就变成了对于任意给定的x,y,z,存不存在m和n使得上面的等式成立。根据裴蜀定理,ax + by = d的解为 d = gcd(x, y),那么我们只要只要z % d == 0,上面的等式就有解,所以问题就迎刃而解了,我们只要看z是不是x和y的最大公约数的倍数就行了,别忘了还有个限制条件x + y >= z,因为x和y不可能称出比它们之和还多的水,
代码为:class Solution {public: //辗转相除法 int gcd(int x, int y){ if(y == 0) return x; else return gcd(y, x % y); } bool canMeasureWater(int x, int y, int z) { if(x + y < z) return false; if(x == z || y == z || x + y == z) return true; return (z % gcd(x, y) == 0); }};
- 365. Water and Jug Problem 水和桶
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- 365. Water and Jug Problem
- [LeetCode]problem 365. Water and Jug Problem
- Water and Jug Problem
- Water and Jug Problem
- Water and Jug Problem
- Water and Jug Problem
- leetcode.365. Water and Jug Problem
- LeetCode 365. Water and Jug Problem
- 图像直方图和反向投影的肤色检测
- VS2015下编译64位GDAL总结
- 从android应用程序跳转到系统的各个设置页面
- hdu 2594 next数组简单运用
- 组合模式(composite)
- 365. Water and Jug Problem 水和桶
- hdu 2444 The Accomodation of Students(判断二分图,二分图最大匹配)
- CocoaPods的安装和遇到的问题
- POJO
- RecyclerView+CardView+SwipeRefreshLayout---学习笔记
- μC/OS和RT-Thread任务调度详解
- 文章标题
- 计算字符个数
- nginx 跨域配置