算法:水桶倒水问题

在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的差值,一个一个实现递减

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

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

你可能感兴趣的:(笔记)