[力扣]365. 水壶问题

倒水

Posted by JinFei on April 10, 2020

题目描述

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。 你允许: 装满任意一个水壶 清空任意一个水壶 从一个水壶向另外一个水壶倒水,直到装满或者倒空

Example1:

  输入: x = 3, y = 5, z = 4
    输出: True

Example2:

  输入: x = 2, y = 6, z = 5
    输出: False

解题思路

  • 不知道怎么写的 先记上
  • 参考
class Solution {
public:
    bool canMeasureWater(int x, int y, int z) {
        if(z<0||z>x+y)
        return false;
        if(!z) return true;//边界
        int g;
        if(x==0||y==0)//除数不为0
            g=x+y;
        else
            g=gcd(x,y);
        return !(z%g);
    }
    int gcd(int a,int b)//辗转相除法
    {
        if(a%b==0)
            return b;
        return gcd(b,a%b);
    }

};