题目
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);
}
};