海盗分椰子吃


----------------------------------------------------------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 <<"椰子最少有:"<<res<< endl;
    }
    return 0;
}

结果:  最少有 15621 个椰子

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值