运维开发网

猴子吃香蕉的问题-摘自Linux shell核心编程指南

运维开发网 https://www.qedev.com 2021-03-02 14:54 出处:51CTO 作者:丁丁历险
某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第九天,猴子发现只剩一根香蕉了,请问这只猴子在第一天总共摘了多少根香蕉?

某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第九天,猴子发现只剩一根香蕉了,请问这只猴子在第一天总共摘了多少根香蕉?

这个问题,我们可以从后往前推导,因为第九天仅剩一根香蕉,而且是因为前一天吃了一半后再多吃一根的结果,那么首先假设如果把多吃的一根还原回去的话(1+1=2),就等于只吃了一半的结果,也就是第八天吃了一半的情况下还剩余两根,而两根仅是第八天的一半(22=4),最后得出第八天的数量为四根香蕉。依此类推,(4+1)2=10,第七天就是十根香蕉。推导效果如图3-4所示,得出推导公式为(n+1)*2,可以获得前一天的香蕉数量。当你找到正确算法后,就可以使用循环语句多次推导即可得到第一天的香蕉数量。

推导演示如下图

猴子吃香蕉的问题-摘自Linux shell核心编程指南

具体脚本如下:

[[email protected] ~]# vim monkey.sh
#!/bin/bash
#功能描述(Description):使用循环计算猴子吃香蕉的问题.
#初始化香蕉数量为1,也就是第九天香蕉数位1.
#每循环一次计算前一天的香蕉数量,循环8次得到第一天的香蕉数量.
banana=1
for i in {1..8}
do
    banana=$[(banana+1)*2]
done
    echo $banana
[[email protected] ~]# chmod +x monkey.sh
[[email protected] ~]# ./monkey.sh 
766

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号