算法:约瑟夫环问题
  RBv8IouXBAVM 2023年11月20日 21 0

问题描述:n个人围成一圈,从编号为k的人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,求最后一个出圈的人 

/*
 * @param arr array 值为range(1,总人数)
 * @param m int 报号到m的人出圈
 * @param current int 从第current+1 个人开始喊1;值为k-1
 * @return 返回最后一个人的编号
 * */
 
//所有人从1到n编号,放到一个数组中
function JosephusProblem($arr,$m,$current=0){
    $len = count($arr);
    if($len==1){
        return $arr[0];   //只剩一个人时候跳出递归
    }else{
        $i=1;
        while($i<$m){
            $i++;
            $current++;
            $current = $current%$len;    //比如,最后剩3人,但m为5;5%3=2
        }
        //从数组中移除元素,并用新元素取代它:array_splice(array,start,length,array)
        //echo $arr[$current],'  ';   //打印每一次报到m号的人
        array_splice($arr,$current,1);
        return JosephusProblem($arr,$m,$current); //开始下一次1到m的报数
    }
}
 
//所有人从1到n编号,放到一个数组中
$arr = range(1,41);
echo JosephusProblem($arr,3,0);  //最后的一个人
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月20日 0

暂无评论

推荐阅读
  1BnnW8rtw7M9   2023年12月22日   119   0   0 算法i++i++mathMath算法
RBv8IouXBAVM