算法:水桶倒水问题

在csdn看到有趣的算法题:5L和6L水桶,如何得到三升水?

本篇文章问题是转载 沉晓 写的【大厂智力题】水桶倒水问题
//以下是我对这个算法问题的一些个人思考

问题:5L和6L水桶,如何得到3L水?

首先解析一下题目,已知条件: 水桶 5L 6L 求 3L 水?(刚看到这个题目的时候还是比较头大的,不知道如何下手,但是从逆向思维上看,这个问题的解法应该是只有两个,下面看分析)
// 因为我只有2个水桶求3L水,所以要么是 6L水桶 余 3L, 要么是 5L 水桶 余 3L

  • 其一(6L => 3L)
    // 6L 水桶余 3L(6-3),这就要求在 5L水桶中余2L , 然后6L倒出去3L
    1). 6L 水桶满水,倒入5L水桶中,6L水桶余1L水
    2). 1L水倒入5L水桶中, 6L水桶装满再倒入5L水桶中, 6L水桶余2L水
    3). 2L水倒入5L水桶中,6L水桶装满再倒入5L水桶中,6L水桶余3L水
总结:这个方法利用的是 6 - 5 = 1 这个差值,我感觉把这个思路往递归算法上靠应该是比较形象的
  • 其二(5L => 3L)
    // 5L 水桶余 3L(5-2),这就要求在 6L水桶中余4L , 然后5L倒出去2L
    1). 5L 水桶满水,倒入6L水桶中,6L水桶余5L水
    2). 5L水桶装满倒入6L水桶中, 5L水桶余4L水
    3). 4L水倒入6L水桶中,5L水桶装满倒入6L水桶,5L水桶余3L
总结:其实这个思路是和上面一致的,只不过是在递减。一开始就把桶最多剩余水量求出来,然后利用6 - 5 = 1的差值,一个一个实现递减

总结:算法问题是对现实世界问题的升华

//算法问题可以理解为数学问题,它是对人的思维逻辑的一种验证方式。就和上文水桶倒水的例子一样,在程序中,它是对递归算法的一种实例化,在数学中,其实是和等差数列是一类的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值