猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
思路:
day10 ==1
day09 ==? A-A/2-1=1, A/2=2, 算出 A=4
day08 ==? B-B/2-1=4; B/2=5, 算出:B=10
day07 ==? C-C/2-1=10, C/2=11, 算出:C=22
day06 ==? D-D/2-1=22, D/2=23, 算出:D=46
day05 ==? E-E/2-1=46, E/2=47, 算出:E=94
day04 ==? F-F/2-1=94, F/2=95, 算出:F=190
day03 ==? G-G/2-1=190, G/2=191, 算出:G=382
day02 ==? H-H/2-1=382, H/2=383, 算出:H=766
day01 ==? I-I/2-1=766, I/2=767, 算出:I=1524
由上面第三项公式,可以结论可以推出:
day10=1
day09=2*(day10+1)
day08=2*(day09+1)
day07=2*(day08+1)
day06=2*(day07+1)
day05=2*(day06+1)
day04=2*(day05+1)
day03=2*(day04+1)
day02=2*(day03+1)
day01=2*(day02+1)
由此假设:
day10=1=p
day09=2*(p+1)
day08=2*[2*(p+1)+1]
…
`以此类推,公式为:p=2*(p+1), 之后循环9次,代码如下:
p = 1
print('第10天剩1个桃子')
for i in range(9, 0, -1):
p = (p+1) * 2
print('第%s天还有%s个桃子' % (i, p))
print('第1天共摘了%s个桃子' % p)
运行结果:
第10天剩1个桃子
第9天还有4个桃子
第8天还有10个桃子
第7天还有22个桃子
第6天还有46个桃子
第5天还有94个桃子
第4天还有190个桃子
第3天还有382个桃子
第2天还有766个桃子
第1天还有1534个桃子
第1天共摘了1534个桃子