365. Water and Jug Problem
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 = 4
Output: True
Example 2:
Input: x = 2, y = 6, z = 5
Output: False
Solution
這題會需要知道
要滿足條件的(z,x,y) 要有z 為gcd(x,y) 的倍數的關係。
數學證明不是重點。
比較像是考數學定義,而非程式。
by the way GCD 的complexity is O(log(a+b))
public boolean canMeasureWater(int x, int y, int z) {
if(z == 0) return true;
if(z > x + y) return false;
int gcd = GCD(x,y);
return z%gcd == 0;
}
public int GCD(int x, int y){
if(x == 0) return y;
else if( x > y) return GCD(x%y, y);
else return GCD(y%x, x);
}
Last updated
Was this helpful?