双桶倒水的Python程序

S = 5; B = 7
s = b = 0
st = set()
for i in range(99):
 st.add(s); st.add(b)
 if len(st) == B+1: break
 if b == 0:
  b = B - (S - s)
  s = S
  print(f'先把大桶装满水再把小桶倒满 {s} {b}')
 else:
  s = min(S, b)
  b -= s
  print(f'小桶倒空后大桶余水倒入小桶 {s} {b}')

先把大桶装满水再把小桶倒满 5 2
小桶倒空后大桶余水倒入小桶 2 0
先把大桶装满水再把小桶倒满 5 4
小桶倒空后大桶余水倒入小桶 4 0
先把大桶装满水再把小桶倒满 5 6
小桶倒空后大桶余水倒入小桶 5 1
小桶倒空后大桶余水倒入小桶 1 0
先把大桶装满水再把小桶倒满 5 3
小桶倒空后大桶余水倒入小桶 3 0
先把大桶装满水再把小桶倒满 5 5
小桶倒空后大桶余水倒入小桶 5 0
先把大桶装满水再把小桶倒满 5 7

当S和B的最大公约数不是1时,比如是2,形如(S-(S-B)的式子是2的倍数,起码倒不出1升。

更相减损术是中国古代《九章算术》记载的求最大公约数的算法:若两数为偶数,则先用2约简。随后循环以大数减小数,直至差与减数相等,最终结果与约简掉的2的乘积即为最大公约数。

posted @ 2025-09-09 16:35  华容道专家  阅读(4)  评论(0)    收藏  举报