递归求桔子数

来源:互联网 发布:js怎么设置display 编辑:程序博客网 时间:2024/05/16 02:11

日本著名数学游戏专家中村义作教授提出这样一个问题:

父亲将2520个桔子分给六个儿子。分完 后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?

/*File name:求橘子数.cppAuthor:杨柳Date:2017/5/22IDE:DEV-c++ *//*经过分析:1.sum=2520  aver=2520/6=4202.老六得到橘子后,给老大1/3后为420,所以给了老大210,老大给出原来的1/8加得到的210对于420,所以原来有240个橘子3.下一个人原来的橘子数:(nextfirstnum+givernum)*(7-n)/(8-n)=420  firstnum=420*(8-n)/(7-n)-givertnum递归公式:f(firstnum,foregivernum,n){                        return 0    n>6return orangenum(nextfirstnum,givernum,n)   givernum=firstnum/(9-n)n=1 or givernum=(firstnum+foregivernum)/(9-n)n>1} */#include<iostream>using namespace std;int orangenum(int firstnum,int foregivernum,int n){ //first代表原有的橘子, forenum代表前n-1一个人给的橘子数,n代表老几 int  givernum=0;if(n>5){return 0;}else{//计算分给下一个数目if(n==1){ //第一个人是先直接给 cout<<"老"<<n<<"原来的橘子数:"<<firstnum<<endl;    cout<<"老"<<n<<"得到的橘子数:"<<foregivernum<<endl;givernum=firstnum/(9-n); cout<<"老"<<n<<"给出的橘子数:"<<givernum<<endl;foregivernum=givernum;}else{ //先得到后再给cout<<"老"<<n<<"得到的橘子数:"<<foregivernum<<endl; int givernum=(firstnum+foregivernum)/(9-n);//当前给出的橘子数 cout<<"老"<<n<<"给出的橘子数:"<<givernum<<endl;foregivernum=givernum;}//下一个人原来的橘子数int firstnum=420*(8-n)/(7-n)-foregivernum;cout<<endl<<"老"<<n+1<<"原来的橘子数:"<<firstnum<<endl;n=n+1;orangenum(firstnum,foregivernum,n);  }} int main(){orangenum(240,210,1);return 0;}