美文网首页程序员PHP经验分享
PHP猴子选大王,最优解决算法:一群猴子排成一圈,按1,2,…,

PHP猴子选大王,最优解决算法:一群猴子排成一圈,按1,2,…,

作者: 余_人 | 来源:发表于2017-12-04 11:56 被阅读828次

    我们采用闭包自调用的方式,很轻松的解决了这个问题,无需循环,代码美观可读性强

    1.我在桌面创建了一个php文件,实现过程如下:

    function monkey(int $m,int $n){

            $arr = range(1,$n);

            $fn = function ($m,&$arr) use(&$fn){

                    if( count($arr) === 1 ) { return true;  } //选出猴子大王,结束执行

                    if( count($arr) >= $m ){ //判断s剩余猴子数量是否大于指定数

                            $key = array_keys($arr)[$m-1];  //第m只猴子的下标

                            unset($arr[$key]); //踢出第m只猴子

                            $arr = array_merge( array_splice($arr, $m-1),array_splice($arr,0,$m-1));

                    }else{

                            $key =  array_keys($arr)[$m%count($arr)-1]; //第m只猴子的下标

                            unset($arr[$key]);

                    };

                    $fn($m,$arr); //自调用

    };

    $fn($m,$arr);  //执行

    echo array_values($arr)[0]; 输出结果

    }

    monkey($argv[1],$argv[2]);  //调用

    2. 运行过程如下:

    3.命令行调用:

    END 

    我只是一个程序员,并不是专业写手,会不会更,在哪个博客更,都是由心情而定,如果喜欢我的可以粉我啊,说不定我就能更很多干货上来

    相关文章

      网友评论

        本文标题:PHP猴子选大王,最优解决算法:一群猴子排成一圈,按1,2,…,

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