Skip to content

PHP 笔试猴子选大王

猴子选大王是一个典型的编程问题,一般可用链表(可以用很大的数)或者 while 循环(使用此办法不能用太大的数)解决。

问题描述

n 只猴子围坐成一个圈,按顺时针方向从 1 到 n 编号。然后从 1 号猴子开始沿顺时针方向从 1 开始报数,报到 m 的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。要求编程模拟此过程,输入 m、n,输出最后那个大王的编号。

解决方法

<?php
/**
 * 猴子选大王
 * @param int $m 数到第 m 只踢出
 * @param int $n 猴子总数
 */
function king($n, $m)
{
    // 生成数组
    $arr = range(1, $n);    
    $i = 1; // 从 1 开始数
    while (count($arr) > 1) {
        if ($i % $m  == 0) {
            unset($arr[$i-1]);
        } else {
            // 本轮非出局的猴子放在数组尾部
            array_push($arr, $arr[$i-1]);
            unset($arr[$i-1]);
        }
        $i++;
    }
    return $arr;
}

扩展资料

  1. PHP 高级研发工程师面试题总结

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*