package math; import java.math.BigInteger; /** * Created by gouthamvidyapradhan on 29/07/2017. 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 */ public class WaterAndJugProblem { /** * Main method * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { System.out.println(new WaterAndJugProblem().canMeasureWater(0, 0, 1)); } public boolean canMeasureWater(int x, int y, int z) { if (x == y && y == z) return true; if (z > (x + y)) return false; BigInteger b1 = new BigInteger(String.valueOf(x)); BigInteger b2 = new BigInteger(String.valueOf(y)); BigInteger b3 = b1.gcd(b2); return b3.intValue() != 0 && (z % b3.intValue()) == 0; } }