您的位置:首页 > 编程语言

创新工场2012笔试编程---捕鱼和分鱼

2011-09-28 16:55 726 查看
创新工场2012笔试编程题目题目三:

A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三竿,A第一个醒来,他将鱼分成五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分成五份,把多余的一条鱼扔掉,拿走自己的一份。C、D、E依次醒来,也按同样的方法拿鱼。问他们合伙至少捕了多少条鱼?

分析:

假设有X条鱼,那么

第1人扔鱼拿鱼之后鱼的数量



第2人扔鱼拿鱼之后鱼的数量



......
第N人分鱼时鱼的数量



依次代入得







所有



得到这个我们可以编程了,代码如下 :

/// <summary>
///
/// </summary>
/// <param name="personCount">人数</param>
/// <param name="throwCount">每次扔鱼数</param>
/// <returns></returns>
public long CalcFish( int personCount, int throwCount )
{
long totalCount = 0;
long offset = 0;
for ( int i = 0; i < personCount; i++ )
{
offset += ( long ) Math.Pow( personCount, i ) * ( long ) Math.Pow( personCount - throwCount, personCount - i );
}

long totalFactor = ( long ) Math.Pow( personCount - throwCount, personCount );
long kFachtor = ( long ) Math.Pow( personCount, personCount + 1 );
for ( int k = 1; k < totalFactor; k++ )
{
long x = kFachtor * k + offset;
if ( x % totalFactor == 0 )
{
totalCount = x / totalFactor;
break;
}
}

return totalCount;
}


调用CalcFish(5,1),测试结果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: