import math
class Solution:
def canMeasureWater(self, x: int, y: int, z: int) -> bool:
#这里我们排除需要得到0升水的情况和恰好有一个壶的容量跟目标一致的情况
if z == 0 or z == x or z == y :
return True
#判断是否超出最大量取容量,超过了就取不到了,应为只有两个壶
if z > x + y :
return False
#这里用到了math库中的最小公约数方法gcd,如果z是最小公约的整数倍关系的时候,就可以取到
return z % math.gcd(x,y) == 0
solution = Solution()
print(solution.canMeasureWater(3, 5, 4)) # 示例调用,期望输出为 True 或 False
主要逻辑如下:
如果目标容量 z 是 0 或者恰好等于其中一个水壶的容量,那么无论如何都可以得到目标容量,因此返回 True。
如果目标容量 z 大于两个水壶的容量之和,那么无论如何都无法得到目标容量,因为只有两个水壶,无法增加水量。因此返回 False。
如果 z 是水壶容量 x 和 y 的最大公约数的倍数,那么可以通过倒水的操作得到目标容量 z。因为每次倒水操作都是增加或减少最大公约数的水量,所以只要 z 是最大公约数的倍数,就可以通过一系列操作得到 z。因此返回 z % math.gcd(x, y) == 0。