----------------------------------------------------------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 个椰子