题意
jug problem,给2个罐子,容积为x和y,给定整数z,问能否用x和y凑出z的水。
可做的:
- 将任一罐子装满水。
- 将任一罐子的水倒掉。
- 将一个罐子的水倒到另一个罐子直到该罐子为空或者另一罐子装满。
思路
如果求最短步数可以通过bfs来做,这道题只需要判断能否有解。
其中步骤3是水在x和y之间流通并不会造成损失,而步骤1和2可以列出如下方程:
mx+ny=z
即我们要做的就是判断是否有解。
根据裴蜀定理,我们只需要判断z是否是x和y的最大公约数g的整数倍即可。
并且还需要满足 x+y≥z
代码
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;
}
};

本文探讨了jugproblem问题,即如何使用两个特定容量的罐子(x和y升)来精确测量目标容量z升的水。文章介绍了问题背景、解决思路,并通过裴蜀定理给出了判断解存在的条件。
&spm=1001.2101.3001.5002&articleId=60325143&d=1&t=3&u=d19bc220ef7341bcb8f611b8a9a4e2a6)
470

被折叠的 条评论
为什么被折叠?



