1. 程式人生 > >分橘子問題(遞迴)

分橘子問題(遞迴)

日本著名數學遊戲專家中村義作教授提出這樣一個問題:父親將2520個桔子分給六個兒子。分完 後父親說:“老大將分給你的桔子的1/8給老二;老二拿到後連同原先的桔子分1/7給老三;老三拿到後連同原先的桔子分1/6給老四;老四拿到後連同原先的桔子分1/5給老五;老五拿到後連同原先的桔子分1/4給老六;老六拿到後連同原先的桔子分1/3給老大”。結果大家手中的桔子正好一樣多。問六兄弟原來手中各有多少桔子?

程式碼如下:

/*
 author:趙
 date:2018/11/16
 內容:分橘子問題
*/

#include<iostream>
using namespace std;
int num[6]; //全域性變數記錄每個兒子分得的橘子數量
void orange(int i,int left) 
{
	int ave = 420;   //2520個橘子平均分給6個兒子的個數
	if (i == 0)
	{
		num[i] = (ave - ave / 2)*(8 - i) / (8 - i - 1);//第一個兒子的數目, 
		left = num[i] - ave / 2; //下一個兒子得到的橘子數
	}
	else
	{
		num[i] = ave*(8 - i) / (8 - i - 1) - left;//由left求第i+1個兒子的橘子數目
		left = ave / (8 - i - 1);//第i+1個兒子得到的橘子數目 
	}
	if (i < 6)
		orange(i + 1, left);
}
int main()
{
	orange(0, 0);
	for (int i = 0; i<6; i++)
	{
		cout << "第" << i + 1 << "個兒子原先手中的橘子數目數為" << num[i] << endl;//輸出每個兒子原先手中的橘子數目 
	}

	return 0;
}