一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停 的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

function monkey($m,$n){
    if(is_int($m) || is_int($n)) return -1;
    if($m < 0 || $n<0) return -1;

    //生成一个随机数组
    $arr = range(1,$n,1);//2从1开始,$n结束,定长是1

    $i= 0 ;//当前的指针
    while(count($arr) >1){
        if(($i+1)%$m == 0){ //这个时候$i 就是m

            unset($arr[$i]); //然后剔除
        }else{
              array_push($arr,$arr[$i]);//如果$i的值不是m,那么从新把$i的值插入到末尾,然后删除前面原有$i的值,因为是圈型
              unset($arr[$i]);
        }

        $i++;
    }

    return $arr[$i];
} 

print_r(monkey(3,5)); 假如m =3,n=5;
世界上最美的风景,是自己努力的模样
原文地址:https://www.cnblogs.com/xiong-hua/p/13946848.html