> 백엔드 개발 > PHP 튜토리얼 > 원숭이 계산 문제

원숭이 계산 문제

WBOY
풀어 주다: 2016-08-08 09:20:36
원래의
1572명이 탐색했습니다.

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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿