問題描述:
/*有一群猴子,去摘了一堆桃子*/
/*商量之後決定每天吃剩餘桃子的一半*/
/*當每天大家吃完桃子之後,有個貪心的小猴都會偷偷再吃一個桃子*/
/*按照這樣的方式猴子們每天都快樂的吃著桃子*/
/*直到第十天,當大家再想吃桃子時,發現只剩下一個桃子了*/
問:猴子們一共摘了多少桃子
問題分析:
按照題意:猴子們每天吃桃子的一半,小猴子再偷吃一個,等於每天都吃前一天剩餘桃子的一半加一個,知道第十天只剩一個桃子。
如下圖:
迭代法實現:
1.採用for迴圈實現
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include<stdio.h> #include <stdlib.h> int main() { int peach = 0;//桃子總數 int rest = 1;//第10 天只剩一個桃子 int day = 0; for(day = 9; day > 0; day--) { peach = (rest + 1) * 2;//每天的桃子總數是後一天剩餘桃子加1乘2 rest = peach; } printf("猴子第一天一共摘了%d個桃子\n",peach); system("pause"); return 0; } |
執行結果:
2.while迴圈實現:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include<stdio.h> #include <stdlib.h> int main() { int peach = 0;//桃子總數 int rest = 1;//第10 天只剩一個桃子 int day = 9; while(day--) { peach = (rest + 1) * 2;//每天的桃子總數是後一天剩餘桃子加1乘2 rest = peach; } printf("猴子第一天一共摘了%d個桃子\n",peach); system("pause"); return 0; } |
執行結果:
遞迴實現:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include<stdio.h> #include <stdlib.h> int total_peach(int rest) { return (rest+1)*2; } int main() { int peach = 0;//桃子總數 int rest = 1;//第10 天只剩一個桃子 int day = 9; while(day--) { peach = total_peach(rest);//遞迴實現 rest = peach; } printf("猴子第一天一共摘了%d個桃子\n",peach); system("pause"); return 0; } |
執行結果: