逻辑思维编程-----倒水问题

其基本思想是用:用小桶容量的倍数对大桶的容量进行取余。比如3升的桶和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


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值