PHP解决约瑟夫环问题

//方法一
function joseph_ring($n,$m){
    $arr = range(1,$n);
    $i = 0;
    while(count($arr)>1){
        $i=$i+1;
        $head = array_shift($arr);//先拿出来做判断,符合删除,不符合插入后面。保证环
        if($i%$m != 0){ //如果不是则重新压入数组
            array_push($arr,$head);//往后面补,代表报过数
        }
    }
    return $arr[0];
}
// 方法二
function joseph_ring2($n,$m){
    $arr = range(1,$n);
    $i = 1;
    while(count($arr)>1){
        foreach($arr as $k=>$v){
              if($i == $m){
                    unset($arr[$k]);
                    $i = 1;
              }else{ 
                    $i += 1;    
              }
        }
    }
    return array_values($arr)[0];
}
//方法三
function joseph_ring3($n,$m){
    $r = 0;
    for($i=2;$i<=$n;$i++){
        $r = ($r+$m)%$i;
    }
    return $r + 1;
}
echo "<br/>".joseph_ring(60,5)."<br/>";
echo "<br/>".joseph_ring2(60,5)."<br/>";
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容