【Python練習題 016】 猴子吃桃問題:猴子第一天摘下若幹個桃子,當即吃了一半,還不癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。 這題得倒著推。第10天還沒吃,就剩1 ...
【Python練習題 016】 猴子吃桃問題:猴子第一天摘下若幹個桃子,當即吃了一半,還不癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
--------------------------------------------------
這題得倒著推。第10天還沒吃,就剩1個,說明第9天吃完一半再吃1個還剩1個,假設第9天還沒吃之前有桃子p個,可得:p * 1/2 - 1 = 1,可得 p = 4。以此類推,即可手算出。
代碼思路為:第10天還沒吃之前的桃子數量初始化 p = 1,之後從9至1迴圈9次,根據上述公式反推為 p = (p+1) * 2 可得第1天還沒吃之前的桃子數量。for迴圈中的print()語句是為了驗證推算過程而增加的。代碼如下:
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個桃子
++++++++++++++++++++++++++++++++++++++