首页 新闻 会员 周边 捐助

经典的一道算法题

1
悬赏园豆:20 [已解决问题] 解决于 2011-09-17 09:56

题目描述:

日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子。分完 后父亲说:老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?

请用c++编译,尽量用简易好懂的算法,谢谢!

javayang的主页 javayang | 初学一级 | 园豆:187
提问于:2011-09-15 14:53
< >
分享
最佳答案
1

学习了。。研究了半天。。看不明白楼上的怎么出来的。。不过答案是对的。。。

用C#写的。。没白费这几个小时。。。- -。还是太菜了。。

staticvoid Main(string[] args)
{
int countNum =2520;
int avgNum = countNum /6 ;
List
<int> list =new List<int>();
Program pro
=new Program();

for (int i =8; i >2; i--)// x-x/i=420 获得X的值
{
//现在的老大是 a-a/8=420 a=480,是临时的
list.Add(avgNum * i / (i -1));
}
list[
0] = (avgNum - list.Last() /3) *8/7;//a - a / 8 + 老六/3=420 ;老六是list最后一个 ,老大a=240

int c =8;
List
<int> newList =new List<int>();
for (int i =0; i < list.Count; i++)
{
if (i ==0)
{
newList.Add(list[
0]);
c
++;
}
else
{
newList.Add(list[i]
- list[i -1] / c);
}
c
--;
}

foreach (int a in newList)
{
Console.WriteLine(a);
}
if (newList.Sum() == countNum)
{
Console.WriteLine(
"\ntrue");
}
else
{
Console.WriteLine(
"\nfalse");
}
Console.Read();
}

 

本来还想用递归的。。试了半天也没试出来。,。还是用迭代写出来了。写到最后发现总数不对,再仔细看题目,原来老六还要给老大、。囧,。

收获园豆:15
倾凡 | 菜鸟二级 |园豆:216 | 2011-09-16 19:28

首先谢谢你的回答!

这是我一个朋友刚写的给我的,还没有验证,先看看:

void OutputResuit(char who, int nOriginalNum, int nAfterGetNum, int n)
{      
    if (who > 'f') {
        return;
    }

    cout<<who<<" nOriginalNum: "<<nOriginalNum<<endl;

    char next = who+1;
   
    int nNumNext = 420 * (n - 1) / (n - 2) - nAfterGetNum / n; // 计算下一个人的原来数目
    int nNumNextAfterGet = nNumNext + nAfterGetNum / n;        // 计算下一个人分给下下一个人后的数目
   
    OutputResuit(next, nNumNext, nNumNextAfterGet,n-1);
}



void main()
{     
    // 因为老六分给老大的1/3 后为2520/6 = 420.
    // 所以老六分给老大的1/3 前为 420 * 3 / 2 = 630.也就是分了210给老大。。。
    // 所以老大分的老六之前的为2520/6 - 210 = 420 - 210 = 210. 由于老大分了原来的 1/8 给老二,
    // 所以 老大原来的为 a,a * 7/8 = 210.==>a=240.. 

    // a 是第一个分给别人的人,所以  nOriginalNum = nAfterGetNum = 240。。。8为分数
    OutputResuit('a', 240, 240, 8);

javayang | 园豆:187 (初学一级) | 2011-09-17 09:53
其他回答(1)
0

420 * 3 / 2请问一下这里为社么要除2啊

cgy_blog | 园豆:202 (菜鸟二级) | 2012-08-29 16:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册