题目大意:

一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

解答:

 

  1. <?php  
  2. /**  
  3.  *param int m 猴子总数  
  4.  *param int n 出局总数  
  5.  *  
  6. **/ 
  7. function monkeyKing($m,$n)  
  8. {  
  9.  
  10. //构造数组  
  11. for($i=1;$i<$m+1;$i++){  
  12.     $arr[] = $i;  
  13. }  
  14.  
  15. //出局的直接删除,未出局的放在数组的后面组成新的数组进行下次循环  
  16. $i = 0; //定义数组指针  
  17. while(count($arr)>1)  
  18. {  
  19.     if(($i+1)%$n == 0){  
  20.     //出局了  
  21.      unset($arr[$i]);  
  22.     }else{  
  23.     array_push($arr,$arr[$i]);  
  24.     unset($arr[$i]);      
  25.     }  
  26.     $i++;   //指针加一  
  27. }  
  28.  
  29. return $arr;  
  30.  
  31. }  
  32.  
  33. //test  测试100只猴子 出局5次 算出猴王的编号为47  
  34.  
  35. var_dump(monkeyKing(100,5));  
  36. ?>