php关于猴子选大王的算法题

<?php
    
    /**
     *  $m 猴子总数
     *  $n 出局数
     */
    function king($m,$n){
        $arr = range(1, $m);
        $i = 0;
        while (count($arr)>1) {
            if(($i+1)%$n == 0){
                unset($arr[$i]);
            }else{
                array_push($arr, $arr[$i]);
                unset($arr[$i]);
            }
            $i++;
        }
        return reset($arr);
    }

    function king2($m,$n){
        $arr = range(1, $m);
        $unsetNum = 0;
        for($i=2;$i<= $m*$n;$i++){
            foreach ($arr as $key => $value) {
                $unsetNum++;
                if($unsetNum == $n){
                    unset($arr[$key]);
                    $unsetNum = 0;
                }
                if(count($arr) == 1){
                    return reset($arr);
                }
            }
        }
    }

    function ysf($m,$n){
        $num=0; 
        for($i=2; $i<=$m; $i++){
            $num=($num+$n)%$i; 
        }
        return $num+1; 
    }

    $res = king(5,3);
    var_dump($res);

    $res2 = king2(5,3);
    var_dump($res2);

    $res3 = ysf(5,3);
    var_dump($res3);

分类:   程序积累  /   /  浏览量:  1429
2017-1-13 13:10 Friday