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