雙桶倒水的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'先把大桶裝滿水再把小桶倒?jié)M {s} {b}') else: s = min(S, b) b -= s print(f'小桶倒空后大桶余水倒入小桶 {s} {b}')
先把大桶裝滿水再把小桶倒?jié)M 5 2
小桶倒空后大桶余水倒入小桶 2 0
先把大桶裝滿水再把小桶倒?jié)M 5 4
小桶倒空后大桶余水倒入小桶 4 0
先把大桶裝滿水再把小桶倒?jié)M 5 6
小桶倒空后大桶余水倒入小桶 5 1
小桶倒空后大桶余水倒入小桶 1 0
先把大桶裝滿水再把小桶倒?jié)M 5 3
小桶倒空后大桶余水倒入小桶 3 0
先把大桶裝滿水再把小桶倒?jié)M 5 5
小桶倒空后大桶余水倒入小桶 5 0
先把大桶裝滿水再把小桶倒?jié)M 5 7
當(dāng)S和B的最大公約數(shù)不是1時,比如是2,形如(S-(S-B)的式子是2的倍數(shù),起碼倒不出1升。
更相減損術(shù)是中國古代《九章算術(shù)》記載的求最大公約數(shù)的算法:若兩數(shù)為偶數(shù),則先用2約簡。隨后循環(huán)以大數(shù)減小數(shù),直至差與減數(shù)相等,最終結(jié)果與約簡掉的2的乘積即為最大公約數(shù)。

浙公網(wǎng)安備 33010602011771號