365. 水壶问题
难度中等
有两个容量分别为 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
思路:根据题意,需判断壶的体积是否与z相等,(x+y)是否小于z,以及x和y是否等于0,满足以上条件,则返回对应的bool型,否则,求出x,y的最大公因数,即两壶可以组合出的最小单位,用z对其取余,如果余数为0,则恰好可以得到z升水,否则,不可以得到。
int fun(int a,int b) { int c=1; while(c!=0){ c=a%b; a=b; b=c; } return a; } bool canMeasureWater(int x, int y, int z){ if(x==z||y==z){ return true; }else if((x+y)<z){ return false; } if(x==0&&y==0){ return false; } if(z%fun(x,y)==0){ return true; }else{ return false; } }