题目
有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。
如果可以得到 targetCapacity 升水,最后请用以上水壶中的一或两个来盛放取得的 targetCapacity 升水。
你可以:
①装满任意一个水壶
②清空任意一个水壶
③从一个水壶向另外一个水壶倒水,直到装满或者倒空
输入:三个数
输出:true/false
示例:
输入:3 5 4
输出:true
图解:图片来源----->水壶问题
输入:2 6 5
输出:false
分析
这是一道数学题。
水量 z 是两个水壶容量的最大公约数的倍数,且 z <= x+y
参考分析链接:
水壶问题-分析链接1
水壶问题-分析链接2
代码(完整代码C++)
#include<iostream>
using namespace std;
class Solution {
public:
bool canMeasureWater(int x, int y, int z) {
if (z > x + y)
return false;
int r;
while (y != 0)//循环结束后,最大公约数是x
{
r = x % y;
x = y;
y = r;
}
return (z == 0 || z % x == 0); //做与或计算
}
};
int main()
{
Solution sol;
int x, y, z;
cin >> x;
cin >> y;
cin >> z;
int result = sol.canMeasureWater(x, y, z);
if (result == 1)
cout << "true" << endl;
else
cout << "false" << endl;
return 0;
}