问题描述:
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?
如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。
你允许:
- 装满任意一个水壶
- 清空任意一个水壶
- 从一个水壶向另外一个水壶倒水,直到装满或者倒空
第一次做的时候,粗心把题目看错了,将题目理解成了:最后使得一个水壶里面有z升水。
第一次的代码:
class Solution { public: bool canMeasureWater(int x, int y, int z) { if (z > x && z > y) return false; if (x > y) swap(x, y); if (x == 0) if (z == 0 || z == y) return true; else return false; for (int temp = 0; y - temp >= 0; temp = temp + x) if (temp == z) return true; for (int temp = y; temp % x != 0; temp = temp - x) { if (temp == z) return true; if (temp < 0) { temp = y + temp; if (temp == z) return true; } } return false; } };
后面发现题目看错了,就改了一下:
class Solution { public: bool canMeasureWater(int x, int y, int z) { if (z > x + y) return false; if (x > y) swap(x, y); if (x == 0) if (z == 0 || z == y) return true; else return false; for (int temp = 0; y - temp >= 0; temp = temp + x) if (temp == z || y + temp == z) return true; for (int temp = y; temp % x != 0; temp = temp - x) { if (temp == z || temp + x == z) return true; if (temp < 0) { if (temp + x + y == z) return true; temp = y + temp; if (temp == z || temp + x == z) return true; } } return false; } };