<p>面试的时候遇见这样一道题:<br/>一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。<br/>约瑟夫算法,呵呵,看了网上的大虾们的代码,感觉很不容易理解,而且还繁琐,于是自己就写了段代码<br/><br/></p><pre class="brush:php;toolbar:false"><?php
/**
*猴子选大王
*
*@paramint$m猴子数
*@paramint$n出局数
*@returnarray
*
*/
functionking($m,$n)
{
//构造数组
for($i=1;$i<$m+1;$i++){
$arr[]=$i;
}
$i=0;//设置数组指针
while(count($arr)>1)
{
//遍历数组,判断当前猴子是否为出局序号,如果是则出局,否则放到数组最后
if(($i+1)%$n==0){
unset($arr[$i]);
}else{
array_push($arr,$arr[$i]);//本轮非出局猴子放数组尾部
unset($arr[$i]);//删除
}
$i++;
}
return$arr;
}
var_dump(king(6,4));
大王为5</pre>