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 = Sprint(f'先把大桶装满水再把小桶倒满 {s} {b}') else:s = min(S, b)b -= sprint(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升。