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


    创新工场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),测试结果如下


     

  • 相关阅读:
    线程唤醒
    以前、现在
    黑马程序员训练营基础测试
    流程图
    线程同步
    Thread联系
    Java线程
    Java中文件流笔记
    字符串习题
    匿名内部类
  • 原文地址:https://www.cnblogs.com/greatalexander/p/2194604.html
Copyright © 2020-2023  润新知