题目大意:
一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
解答:
- <?php
- /**
- *param int m 猴子总数
- *param int n 出局总数
- *
- **/
- function monkeyKing($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;
- }
- //test 测试100只猴子 出局5次 算出猴王的编号为47
- var_dump(monkeyKing(100,5));
- ?>