分橘子問題(遞迴)
阿新 • • 發佈:2018-12-22
日本著名數學遊戲專家中村義作教授提出這樣一個問題:父親將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; }