n마리의 원숭이가 원형으로 앉아서 차례로 1, 2, 3을 보고합니다. 3을 보고한 원숭이는 모두 대기열에서 나옵니다. 마지막 남은 사람은 원숭이 왕입니다. PHP로 함수를 작성해주세요. 입력은 원숭이의 수, 반환값은 원숭이왕의 일련번호입니다.
PHP 코드
<?php function fun($n,$begin) { //输入判断 if(!is_int($n) || $n<=0)return false; if(!is_int($begin) || $begin>$n || $begin<=0)return false; //初始化数组,使其内部指针指向传进函数的“开始位置” $arr = array(); for($i=1;$i<=$n;$i++)$arr[] = $i; for($i=1;$i<$begin;$i++,next($arr)); while(count($arr)>1) //当数组大小不为1时循环报数 { //报数,往后数两位 for($i=0;$i<2;$i++) { if(!next($arr))reset($arr); } //获得报数3位置的键、值(此处内部指针会前进一步) $key = each($arr); if(!current($arr)) //如果报数到3的位置是数组末端,及通过each后,指针超出了数组的范围 { reset($arr); //将内部指针重置到数组首部 array_pop($arr); //删除数组末端的键、值 } else { prev($arr); //否则指针回退一格 unset($arr[$key['key']]); //删除报数为3的键、值 } } if(!current($arr))reset($arr); //循环过后,因为each操作,内部指针有可能超越了数组末端,需要重置 return current($arr); } echo fun(5,3); ?>