leetcode 365. 水壶问题 (两个水杯容量x、y问是否得到z升的水 随便想想就知道了。。。)

题目
在这里插入图片描述
x+y以上的得不到。
假如x>y:x是第一个杯子、y是第二个杯子。
我们可以得到x-y、x-2y、x-3y 知道 x-ny。
y这个杯子里面装有x-ky(0<k<=n)水,然后 x装满水,把y这个杯子填满。(x-ky<=y)
x这个杯子就得到x-(y-(x-ky))=x-y+x-ky=2x-(k+1)y.

假如x-ky>y 则 (x-y+x-ky=2x-(k+1)y)>(y+x-y=2x)、所以2x-(k+1)y就不会等于z了,因为z<x+y<2x;

然后我们用2x-(k+1)y往复这样的操作。。 就可以得到ax-by,只要ax-by=z就ok。。

然后就是扩展欧几里得,我忘了哈哈。

ax+by=gcd(x,y) 一定会存在,且ax+by一定是gcd(x,y)的倍数。

class Solution {
public:
    bool canMeasureWater(int x, int y, int z) {
        if(x<y) swap(x,y);
        if(z>x+y) return false;
        int d=gcd(x,y);
        if(!d) return !z;
        return !(z%d);
    }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值