Wednesday, June 29, 2016

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
Credits:
Special thanks to @vinod23 for adding this problem and creating all test cases

another key to understand this solution is the calculation of greatest common divisor.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public class Solution {
    public boolean canMeasureWater(int x, int y, int z) {
        /*//this code is for measuring and filling the z
        if(x==0&&y==0&&z!=0)return false;
        if(x==0&&y==0&&z==0)return true;
       return x + y == z || z % dieHard(x,y) == 0;*/
       //this code is for a condition that what's left in x and y is z
       return x + y == z || (x+y)>=z&&z % dieHard(x,y) == 0;
    }
    //mx + ny = z
    private int dieHard(int a,int b){
        return b==0? a: dieHard(b,a%b);
    }
}

No comments: