海盗分椰子吃


----------------------------------------------------------Sun---------------------------------------------------------------------------

来自牛客智力题

  话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有棵椰子树,还有一只猴子! 大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先.

  晚上某个家伙悄悄的起床,悄悄的将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的猴子,然后又悄悄的藏了一份,然后把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了. 过了会儿,另一个家伙也悄悄的起床,悄悄的将剩下的椰子分成5份,结果发现多一个椰子,顺手就又给了幸运的猴子,然后又悄悄滴藏了一份,把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了. 又过了一会 ... ... 又过了一会 ... 总之5个家伙都起床过,都做了一样的事情 早上大家都起床,各自心怀鬼胎的分椰子了,这个猴子还真不是一般的幸运,因为这次把椰子分成5分后居然还是多一个椰子,只好又给它了。


   问题来了,问这堆椰子最少有个?


  思路:



   假设总共有x个椰子,第一个人藏的有x1个,第二个人藏了x2个,第三个藏了x3个,第四个藏了x4个,第五个藏了x5个椰子,第二天早上剩下的椰子有y个,最后公开每个人分得y'个椰子。
  那么:
   因为五个人各自藏了一部分之后剩下的是四份,所以每一次的椰子必须能 被4整除,而且还除以5余1
   x=5*x1+1;    4*x1=5*x2+1;   4*x2=5*x3+1;   4*x3=5*x4+1;    4*x4=5*x5+1;     4*x5=y;    y=5*y1+1;
   得 x=(15625*y' + 11529)/1024 = (15*y'+11) + 265(y'+1)/1024
   当y'=1023时,x有最小值 x=15*1023+11+265=15621



int main()
{
    int i,temp,res;
    for(res = 16;res < 20000;res++)   //符合最小条件的应是16
    {
        temp = res;
        for( i = 0;i <= 5;i++)  //总共五个海盗,最多分五次
        {
            if( temp%5 == 1)
                {
                temp = (temp-1)*4/5;   //留下这一次的五分之四
            }
            else
                temp = -1;
        }
        if(temp != -1)
            cout <<"椰子最少有:"<

结果:  最少有 15621 个椰子

你可能感兴趣的:(海盗分椰子吃)