1. 程式人生 > >(C語言版)猴子吃桃問題

(C語言版)猴子吃桃問題

問題描述:

/*有一群猴子,去摘了一堆桃子*/

/*商量之後決定每天吃剩餘桃子的一半*/

/*當每天大家吃完桃子之後,有個貪心的小猴都會偷偷再吃一個桃子*/

/*按照這樣的方式猴子們每天都快樂的吃著桃子*/

/*直到第十天,當大家再想吃桃子時,發現只剩下一個桃子了*/

問:猴子們一共摘了多少桃子

問題分析:

按照題意:猴子們每天吃桃子的一半,小猴子再偷吃一個,等於每天都吃前一天剩餘桃子的一半加一個,知道第十天只剩一個桃子。

如下圖:


迭代法實現:

1.採用for迴圈實現

#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迴圈實現:

#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;
}

執行結果:


遞迴實現:

#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;
}
執行結果: