猴子吃桃問題(理想狀態 逆推思想加遞迴呼叫)

2021-09-13 02:00:24 字數 897 閱讀 1130

猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了乙個。第二天早上又將剩下的桃子吃掉一半,又多吃了乙個。以後每天早上都吃了前一天剩下的一半零乙個。到第10天早上想再吃時,見只剩下乙個桃子了。求第一天共摘了多少。

看見這道題的第一感覺就是逆推思想,我把這個時間和動作顛倒過來:第一天有1個桃子,第二天再第一天桃子基礎上加1個桃子,再乘以2,到第十天有幾個桃子?

這下問題是不是變得很好理解和解決了。。。

遞迴方法直接解決。在函式中新增乙個計數器,當計數器等於10時立即跳出程式,輸出結果(也可以選擇當計數器的值為9時跳出程式,不過計數器第一天必須從0開始,第二天為1,以此類推)。在程式設計是也要注意語句的順序,語句一般是順序執行的,要注意語句順序和邏輯順序,不符合的話會造成程式執行結果和預期結果不一樣。比如說,要是在本題目中將back()函式中的total = (n + 1) * 2語句放在判定語句的前面,那麼就會多計算一次;要是將i++放在判定語句的後面,那麼應該用9來表示第十天,因為i初始化是0,在函式中再執行加1操作,而不是在剛開始就對i進行自增。

**如下:

/*猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了乙個。

第二天早上又將剩下的桃子吃掉一半,又多吃了乙個。以後每天早上都吃了前一天剩下的一半零乙個。

到第10天早上想再吃時,只剩下乙個桃子了。求第一天共摘了多少。*/

#includeusing namespace std;

int i = 0,total = 0;

void back(int n)

total = (n + 1) * 2; //當天桃子數量

back((n + 1) * 2); //遞迴 }

int main()

猴子吃桃問題

猴子吃桃問題 時間限制 3000 ms 記憶體限制 65535kb 難度 0 描述 有一堆桃子不知數目,猴子第一天吃掉一半,又多吃了乙個,第二天照此方法,吃掉剩下桃子的一半又多乙個,天天如此,到第 m天早上,猴子發現只剩乙隻桃子了,問這堆桃子原來有多少個?m 29 輸入 第一行有乙個整數 n,表示有...

猴子吃桃問題

有乙隻猴子第一天摘下若干個桃子,當即吃掉了一半,有多吃了乙個 第二天又將剩下的桃子吃掉一半,有多吃了乙個 按照這樣的吃飯每天都吃掉前一天剩下的一半又多乙個。到了第10天,就剩下乙個桃子。問題,這個桃子第一天摘了多少個桃子。include int main printf d n ans return ...

猴子吃桃問題

猴子吃桃問題 猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了乙個 第二天早上又將剩下的桃子吃掉一半,又多吃了乙個。以後每天早上都吃了前一天剩下的一半零乙個。到第10天早上想再吃 時,見只剩下乙個桃子了。求第一天共摘了多少。方法一 public class test w w 1 2 syst...