约瑟夫环问题(猴子选大王) PHP解题


发文时间:2021年07月01日 12:25:55     编辑:Aaron      标签:PHP算法题 913


一群猴子排成一圈,按1,2,…,n依次编号

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

public function index(){
    $h=$this->mk(12,8);
    dump($h);//输出 array (size=1) 88 => int 5
}

public function mk($n,$m){
    //1、生成猴子队伍
    $team=range(1,$n);

    //2、按规则寻找猴王
    $i=0;
    //只要猴子队伍里还有猴就继续排
    while(count($team)>1){
        //判断当前猴子是否是要被T出队伍的,若不是 则把猴子排到最后的位置
        if(($i+1)%$m!=0){
            array_push($team,$team[$i]);
        }
        //无论当前猴子是否要被T出队伍还是排到最后,都要清空猴子之前的位置
        unset($team[$i]);
        $i++;
    }
    //返回猴王~
    return $team;
}


 

若无特殊说明,此文章为博主原创。
写稿不易,如需转载,请注明出处: https://www.aaroner.cn/art/79.html




SITE MAP

  FOLLOW US