PHP约瑟夫小游戏的代码示例

本篇文章给大家带来的内容是关于PHP约瑟夫小游戏的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

    /**
     * 调用运算方法
     * */
    public function test(){
        //游戏的人
        $players = [];
        //选取30人
        for ($i = 1; $i <= 30; $i++) {
            $players[] = $i;
        }
        //需要淘汰人数 达到淘汰人数15 游戏结束
        $Eliminate = 15;
        //读到数字9的玩家淘汰
        $num = 9;
        //开始数字
        $begin_num = 1;
        //返回淘汰人数
        $result = $this->_josephGame($players, $num, $begin_num, $Eliminate);
        return dump($result);
    }

    /**
     * 约瑟夫游戏
     * @param $arr 游戏总人数
     * @param $number 淘汰的数字
     * @param $i 开始数字
     * @param $unset_number 淘汰人数
     * @param array $arr_unset 淘汰的人集合
     * @return array 返回淘汰人数
     */
    public function _josephGame($arr,$number,$i,$unset_number,$arr_unset = [])
    {
        //$n 记录当前循环次数
        $n = 0;
        //$arr_count 当前还在游戏内的人数
        $arr_count = count($arr);
        foreach ($arr as $k => $v){
            //循环次数 +1
            $n++;
            // 判断是否数到了需要淘汰的数字(默认数字9)
            if($i == $number){
                //统计淘汰的人
                $arr_unset[] = $arr[$k];
                //删除淘汰的人
                unset($arr[$k]);
                //判断是否达到了淘汰人数(默认15人)
                if(count($arr_unset) >= $unset_number)  break;
                //数字到9了之后 重新开始计数
                $i = 0;
            }
            //数字默认 +1
            $i++;
            //判断是否已经已经走完了一轮 走完了重新开始
            if($arr_count == $n) $this->_josephGame($arr,$number,$i,$unset_number,$arr_unset);
        }
        return  $arr_unset;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值