LeetCode 365. 水壶问题

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;
    }

}

 

posted @ 2020-03-21 22:08  莴苣&  阅读(161)  评论(0编辑  收藏  举报