题目详情:水壶问题
1. 思路
这道题有两种解题思路。
第一种是利用深度搜索(递归),每次遍历所有可能的操作(6种):
- 把 X 壶的水灌进 Y 壶,直至灌满或倒空;
- 把 Y 壶的水灌进 X 壶,直至灌满或倒空;
- 把 X 壶灌满;
- 把 Y 壶灌满;
- 把 X 壶倒空;
- 把 Y 壶倒空。
这种解法算是能想到的标准解法,不过时间和空间都不好。
第二种是利用数学思维,求出 X 壶和 Y 壶的最大公约数 gcd,只要 Z 能整除 gcd
,就是有解了。
老实说这方法我是看题解得到的,并没搞清楚里面的原理,有数学功底就是厉害 😂。
最后需要强调的是,这道题的限制条件挺多的,比如当 Z = 0
,又或者 X + Y < Z
等等。大家要仔细审题(我一开始 2 次提交失败都是吃了这个苦)。
2. 代码(最小公约数解法)
这次我试了两种语言 —— JavaScript 和 Python。写法差不多,唯一的区别就是求最大公约数的方法,Python 内置在了 math
里面,JS 是我