簡明現代魔法 -> c/c++ -> 趣味演算法:猴子吃桃問題
趣味演算法:猴子吃桃問題
2010-05-26
猴子第一天摘下若干桃子,當即吃了一半,還不過癮,又多吃了乙個。第二天早上又將剩下的桃子吃掉一半,又多吃了乙個。以後每天早上都吃了前一天剩下的一半零乙個。到第10天早上想再吃時,見只剩下乙個桃子了。求第一天共摘多少桃子。
c 程式:
#include
int main()
int sum = 1, i;
int wait;
for (i = 9; i >= 1; i--)
sum = (sum + 1) * 2;
printf("the num of peace are %d\n", sum);
scanf_s("%d", &wait);
return 0;
此題用倒推的辦法,所以注意迴圈結束的條件。多數情況下用迴圈為遞增方式,本題中用遞減方式,因此是: i >= 1 。
分步驗證如下:
#include
int main()
int prev ;
int next = 1 ;
int i;
int wait;
for (i = 9; i >= 1; i--)
prev = (next + 1) * 2 ;
printf("i=%d total=%-5d \n", i, prev);
next = prev;
scanf_s("%d,&wait");
return 0;
程式執行結果:
i=9 total=4
i=8 total=10
i=7 total=22
i=6 total=46
i=5 total=94
i=4 total=190
i=3 total=382
i=2 total=766
i=1 total=1534
猴子吃桃演算法
猴子第一天摘下若干個桃子,當即吃了一半,還不過癮就多吃了乙個。第二天早上又將剩下的桃子吃了一半,還是不過癮又多吃了乙個。以後每天都吃前一天剩下的一半再加乙個。到第10天剛好剩乙個。問猴子第一天摘了多少個桃子?這是乙個很經典的遞迴演算法,只要找到遞迴公式就迎刃而解 第n天桃子總數 第n天桃子總數 2 ...
猴子吃桃演算法
猴子吃桃問題 猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一 個 第二天早上又將剩下的桃子吃掉一半,又多吃了乙個。以後每天早上都吃了前一天剩下的一半零一 個。到第 10 天早上想再吃時,見只剩下乙個桃子了。求第一天共摘了多少。程式分析 採取逆向思維的方法,從後往前推斷。下面用了for迴圈...
猴子吃桃問題
猴子吃桃問題 時間限制 3000 ms 記憶體限制 65535kb 難度 0 描述 有一堆桃子不知數目,猴子第一天吃掉一半,又多吃了乙個,第二天照此方法,吃掉剩下桃子的一半又多乙個,天天如此,到第 m天早上,猴子發現只剩乙隻桃子了,問這堆桃子原來有多少個?m 29 輸入 第一行有乙個整數 n,表示有...