<p>面试的时候遇见这样一道题:<br/>一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。<br/>约瑟夫算法,呵呵,看了网上的大虾们的代码,感觉很不容易理解,而且还繁琐,于是自己就写了段代码<br/><br/></p><pre class="brush:php;toolbar:false">&lt;?php /** *猴子选大王 * *@paramint$m猴子数 *@paramint$n出局数 *@returnarray * */ functionking($m,$n) { //构造数组 for($i=1;$i&lt;$m+1;$i++){ $arr[]=$i; } $i=0;//设置数组指针 while(count($arr)&gt;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>
返回顶部 留言