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 チュートリアルに興味のある友人に役立つことを願っています。