做英語教具的網(wǎng)站谷歌競價(jià)排名推廣公司
文章預(yù)覽:
- 題目
- python解法一:
- 運(yùn)行結(jié)果
- python解法二:
- 運(yùn)行結(jié)果
- python解法三:
- 運(yùn)行結(jié)果
題目
猴子吃桃問題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè)。
第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。
以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見只剩下一個(gè)桃子了。求原來它一共摘了多少只桃子。
這是一個(gè)比較簡單的python習(xí)題。
python解法一:
我們從后往前想,最后一次不就剩1個(gè)了嗎,那么前一天剩多少個(gè) 和容易想到2*1+2,那么我們倒序想 就是 a n + 1 = 2 ? a n + 2 a_{n+1}=2*a_n+2 an+1?=2?an?+2
def count(day):a=1for i in range(day-1):a=a*2+2return a
print("第10天共摘了{(lán)}桃子".format(count(10)))
運(yùn)行結(jié)果
第10天共摘了1534桃子
python解法二:
我們可以使用遞歸的辦法,每次減小天數(shù),天數(shù)為1的時(shí)候是1
代碼如下:
def monkey_count(day):if day==1:return 1else:return 2*monkey_count(day-1)+2print("第{}天剩一個(gè)那總共有{}".format(10,monkey_count(10)))
運(yùn)行結(jié)果
第10天剩一個(gè)那總共有1534
python解法三:
讓我們算最終解法:復(fù)雜度最低的算法,我們干嘛不尋找規(guī)律完全解出這個(gè)通項(xiàng)豈不美哉。
由上面我們推導(dǎo)出了公式 a n = 3 / 2 ? 2 n ? 2 a_n=3/2*2^n-2 an?=3/2?2n?2
那編程就容易多了
代碼如下:
a=int(input())
count=3*2**(a-1)-2
print("第{}天剩一個(gè)那總共有{}".format(a,count))
運(yùn)行結(jié)果
輸入10
第10天剩一個(gè)那總共有1534