Heim  >  Artikel  >  Backend-Entwicklung  >  Problem beim Affenzählen

Problem beim Affenzählen

巴扎黑
巴扎黑Original
2016-11-10 13:56:101166Durchsuche

n Affen sitzen im Kreis und melden abwechselnd die Nummern 1, 2 und 3. Jeder Affe, der 3 meldet, kommt aus der Warteschlange. Der letzte, der noch übrig ist, ist der Affenkönig. Bitte schreiben Sie eine Funktion in PHP. Die Eingabe ist die Anzahl der Affen und die Startposition der Zählung. Der Rückgabewert ist die Seriennummer des Affenkönigs

PHP-Code

<?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[&#39;key&#39;]]); //删除报数为3的键、值   
}  
}  
if(!current($arr))reset($arr); //循环过后,因为each操作,内部指针有可能超越了数组末端,需要重置  
return current($arr);  
}  
  
echo fun(5,3);  
?>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn