猴子选大王
n只猴子围成一个圈,按照顺时针方向从1到n编号
然后从1号猴子开始,延顺时针方向报数,报到m的猴子出局
再从出局的猴子的下一只猴子开始报数,如此重复,直到剩下一只猴子,
它就是大王。
设计程序要求:
1)要求用户输入开始的猴子数n,报数的最后一个数字m
2)给出猴王的初始编号
function king($n,$m){
//建一个连续数组给猴子编号
$arr = range(1, $n);
$i = 1;
while(count($arr)>1){
//每次取出数组中最前面的猴子
$fs = array_shift($arr);
//如果没数到m或m的倍数,则将其重新插入到数组最后
//数到了则直接剔除
if($i%$m!=0){
array_push($arr, $fs);
}
$i++;
}
return $arr[0];
}
echo king(7,3);
方法二:与一相同不过不叫易于理解
function mk($n,$m){
$monkey = range(1,$n);
$i=1;
while(count($monkey)>1){
if($i%$m==0){
unset($monkey[$i-1]);
}else{
array_push($monkey,$monk