PHP约瑟夫环问题

循环

function circle($arr,$idx,$k){
    for($i=0;$i<$idx;$i++){
        $tmp = array_shift($arr);
        array_push($arr,$tmp);
    }
    $j = 1;
    while(count($arr) > 0){
        $tmp = array_shift($arr);
        if($j++%$k == 0){
            echo $tmp."\n";
        }else{
            array_push($arr,$tmp);
        }
    }
}

$arr = [1,2,3,4,5,6,7,8,9,10,11,12];
$idx = 3;
$k = 4;
circle($arr,$idx,$k);

递归

function circle($arr,$idx,$k){
    $len = count($arr);
    $i = 1;
    if($len == 1){
        echo $arr[0]."\n";
        return ;
    } else {
        while($i++ < $k){
            $idx++;
            $idx = $idx%$len;
        }
        echo $arr[$idx]."\n";
        array_splice($arr,$idx,1);
        circle($arr,$idx,$k);
    }
}

$arr = [1,2,3,4,5,6,7,8,9,10,11,12];
$idx = 3;
$k = 4;
circle($arr,$idx,$k);

猜你喜欢

转载自blog.csdn.net/u013474436/article/details/78697002