学习了。。研究了半天。。看不明白楼上的怎么出来的。。不过答案是对的。。。
用C#写的。。没白费这几个小时。。。- -。还是太菜了。。
本来还想用递归的。。试了半天也没试出来。,。还是用迭代写出来了。写到最后发现总数不对,再仔细看题目,原来老六还要给老大、。囧,。
首先谢谢你的回答!
这是我一个朋友刚写的给我的,还没有验证,先看看:
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);
}
420 * 3 / 2请问一下这里为社么要除2啊