题目地址在:倒水问题
所谓倒水就是说有两个容器,体积分别为a,b,完成若干次操作后,在某一个容器中恰好留下c体积的水
操作只有三种:装满容器、置空容器以及将水从一个容器转移到另一个容器
因此,不是任意值的a,b,c都能有解的,以下两种情况是无解的:
1. c比max(a,b)还要大,这样无论怎样都不可能在单个容器中存下足够的水
2.c不是a,b的最大公约数的倍数值,即c%gcd(a,b)!=0 ,求最大公约数的算法就是辗转相除法
在有解的情况下,可以使用很多方法来求解,本人使用的是模拟法,即模拟装水、倒水的过程,直到取到规定体积的水,函数如下:
def step(a,b):
steps=0
pa=0
pb=0
while pa!=c and pb!=c:<span style="white-space:pre"> </span>#判定是否已经取到规定体积的水
if pa==0:<span style="white-space:pre"> </span>#若瓶a为空,装满瓶a
pa=a
steps+