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()