0
点赞
收藏
分享

微信扫一扫

猴子吃桃的2个问题

Fifi的天马行空 2022-07-14 阅读 67


1、简单的猴子

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天摘了多少个桃子。

# day = 10 remain =1
def getInitValueByForRange(day, remain):
for i in range(1, day):
remain = 2 * remain + 2
return remain


# day =0
def getInitValueByRecursion(day):
if day <= 0:
return -1
elif day == 10:
return 1
else:
return 2 * getInitValueByRecursion(day + 1) + 2


def getInitValueByWhile(day):
remain = 1
while day > 1:
remain = remain * 2 + 2
day -= 1
return remain


def main():
curDay = 10 # 代表当前天号
print(getInitValueByForRange(curDay, 1))
print(getInitValueByWhile(curDay))
destDay = 1 # 表示找的目标天号
print(getInitValueByRecursion(destDay))


main()

2、升级的猴子

一个猴子第一天吃掉一半桃子,第二天吃掉前一天剩下的一半零两个,第三天吃掉剩下的一半零两个,第十天只剩下一个桃子,求第一天一共吃掉多少个桃子?

def getInitByCursion(day):
if day <= 0 or day > 10:
return -1
elif day == 10:
return 1
elif day == 1:
return getInitByCursion(day + 1) * 2
else:
return 2 * getInitByCursion(day + 1) + 4


def getInitByLaw(day):
if day > 10 or day <= 0:
return -1
elif day == 10:
return 1
elif day == 1:
return getInitByLaw(2) * 2
else:
return 10 * pow(2, 10 - day - 1) - 4


def main():
day = 1
print(getInitByCursion(day))
print(getInitByLaw(day))


main()


举报

相关推荐

0 条评论