美文网首页
PHP单向链表解决得瑟约夫问题

PHP单向链表解决得瑟约夫问题

作者: 胡乱唱歌ing | 来源:发表于2019-11-12 14:57 被阅读0次

    概述:约瑟夫问题是个有名的问题,N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉

    $arr = [1,2,3,4,5,6,7,8,9,10];//假如有10个人
    $n = 3;//数到第三个kill掉一个人
    
    function sigleLink($arr,$n)
    {
        $count = count($arr);//获取总人数
        $k = $n;//记录步数
        while ($count > 1) { //如过只剩一个人就跳出循环
            
            foreach ($arr as $key => $val) {
              // 因为数组下标是从0开始,所以要$n-1
                if($key == ($n-1))
                {
                    $temp = $arr[$key];
                    unset($arr[$key]);
                    echo $temp."出局: ".implode(',',$arr)." \n";
                    $n += $k; //继续往下数$k个
                    continue;
                }else
                {
                    array_push($arr,$arr[$key]);//把前面的元素追加数组末尾,形成单链表
                    unset($arr[$key]);
                }
            }
            $count = count($arr);//更新人数
        }
        print_r($arr);//打印最后剩下的
    }
    sigleLink($arr,$n);
    

    相关文章

      网友评论

          本文标题:PHP单向链表解决得瑟约夫问题

          本文链接:https://www.haomeiwen.com/subject/gpqqictx.html