其基本思想是用:用小桶容量的倍数对大桶的容量进行取余。比如3升的桶和5升的桶得到4升水可以这样做:
3 % 5 = 3
6 % 5 = 1
9 % 5 = 4
3 % 5 = 3
6 % 5 = 1
9 % 5 = 4
成功得到4升水。
同样,用7升的桶和11升的桶得到2升水可以这样做:
7 % 11 = 7
14 % 11 = 3
21 % 11 = 10
28 % 11 = 6
35 % 11 = 2
成功得到2升水。
# -*- coding:utf-8 -*-
'''
思想:用小桶水不停的给大桶装水
用小桶容量的倍数对大桶的容量进行取余
'''
a_full_water = 7 #小桶
b_full_water = 11 #大桶
goal_water = 2 #目标取水量
a_over_water = 0 #A中剩余水
b_over_water = 0 #B中剩余水
list_count = []
while True:
if a_over_water == 0:
'''给A water 装水'''
a_over_water = a_full_water
else:
if a_over_water < b_full_water - b_over_water:
'''B 中剩余水 = 原来B中剩余水 + A 中的水'''
b_over_water += a_over_water
list_count.append(b_over_water)
a_over_water = 0
else:
'''A中剩余水大于B中可装的水'''
a_over_water = a_over_water + b_over_water - b_full_water
if a_over_water == goal_water:
list_count.append(a_over_water)
break
'''清空B桶中的水,在把A桶中的水倒入B桶中'''
b_over_water = a_over_water
list_count.append(b_over_water)
a_over_water = 0
print list_count