<?php /** * 猴子选大王 * * @param int $n 猴子数 * @param int $m 出局数 * @return array * */ function king($n ,$m) { //构造数组 for($i=1 ;$i<$n+1 ;$i++){ $arr[] = $i ; } $i = 0 ; //设置数组指针 while(count($arr)>1) { //遍历数组,判断当前猴子是否为出局序号,如果是则出局,否则放到数组最后 if(($i+1)%$m ==0) { unset($arr[$i]) ; } else { array_push($arr ,$arr[$i]) ; //本轮非出局猴子放数组尾部 unset($arr[$i]) ; //删除 } $i++ ; } return $arr ; } print_r(king(3,2)); ?>
问题:n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。设计并编写程序,实现如下功能: (1)要求由用户输入开始时的猴子数n、报数的最后一个数m。 (2)给出当选猴王的初始编号。