题干
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?
如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。
你允许:
装满任意一个水壶
清空任意一个水壶
从一个水壶向另外一个水壶倒水,直到装满或者倒空
示例 1: (From the famous “Die Hard” example)
输入: x = 3, y = 5, z = 4
输出: True
示例 2:
输入: x = 2, y = 6, z = 5
输出: False
想法
要不dfs 要么有一个数学定理…
参考即可
今天刚做完蓝桥杯
思路官方说的很清楚,
因为其他的状态都可等效
即两杯水不可能同时没装满
根绝定理直接找最大公约数就做出来了
Java代码
package daily;
public class CanMeasureWater {
public boolean canMeasureWater(int x, int y, int z) {
if(x==0||y==0){
return x+y==z||z==0;
}
if(x+y<z){
return false;
}
return z%gcd(x,y)==0;
}
public static int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
public static void main(String[] args){
CanMeasureWater canMeasureWater=new CanMeasureWater();
System.out.println(canMeasureWater.canMeasureWater(3,5,4));
}
}