Leetcode 365

来源:互联网 发布:会员数据分析公司 编辑:程序博客网 时间:2024/04/30 03:12

题意

jug problem,给2个罐子,容积为x和y,给定整数z,问能否用x和y凑出z的水。

可做的:

  1. 将任一罐子装满水。
  2. 将任一罐子的水倒掉。
  3. 将一个罐子的水倒到另一个罐子直到该罐子为空或者另一罐子装满。

思路

如果求最短步数可以通过bfs来做,这道题只需要判断能否有解。

其中步骤3是水在x和y之间流通并不会造成损失,而步骤1和2可以列出如下方程:

mx+ny=z

即我们要做的就是判断是否有解。

根据裴蜀定理,我们只需要判断z是否是x和y的最大公约数g的整数倍即可。

并且还需要满足x+yz

代码

class Solution {public:    bool canMeasureWater(int x, int y, int z) {        if (x == 0 || y == 0) return z == x || z == y;        int g = __gcd(x, y);        return !(z % g) && x + y >= z;    }};
0 0