* 一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,
* 从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,
* 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号*/
刚开发搞PHP一周,看了下面试题。如是乎写下实现方法,可能有错误。
<html> <head> <title>测试表单提交</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <?php $monkeys[]=''; $m=45; $n=6; $index=0; for($i=0;$i<45;$i++) { $monkeys[$i]=$i+1; } echo $m."只猴子排成一圈,按1,2,…,45依次编号。然后从第1只开始数,数到第".$n."只,把它踢出圈,最后剩下编号为"; function whoisKing($monkeys,$n,$index){ if(count($monkeys)==1){ echo $monkeys[0].'的猴子,他就是猴王!谁不服气'; return; } //echo "当前还剩".count($monkeys)."个猴子如下<br/>"; for($i=0;$i<count($monkeys);$i++){ //echo $monkeys[$i]." "; } //echo "<br/>"; $tempIndex=$index; $tempCount=count($monkeys); for($i=0;$i<$tempCount;$i++){ if(($i+1+$index)%$n==0) { //echo $monkeys[$i]."出局<br/>"; unset($monkeys[$i]); } $tempIndex++; $tempIndex=$tempIndex%$n; } whoisKing(array_values($monkeys),$n,$tempIndex); } whoisKing($monkeys,$n,$index); ?> </body> </html>