>  기사  >  백엔드 개발  >  원숭이 계산 문제

원숭이 계산 문제

WBOY
WBOY원래의
2016-08-08 09:20:361515검색

n원숭이는 원형으로 앉아서 차례로 1, 2, 3을 보고합니다. 원숭이가 3을 보고할 때마다 대기열에서 나옵니다. 마지막 남은 사람은 원숭이 왕입니다. 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);
?>

저작권 설명: 이 글 해당 블로거의 원본 글이므로, 블로거의 허락 없이 복제를 금합니다.

위 내용은 원숭이 계산 문제를 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.