双桶倒水的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的乘积即为最大公约数。

浙公网安备 33010602011771号