php一群猴子排成一圈,【php】猴子排成一圈,选大王

今天闲着没事看到网上一个编程题目:

/**

一 群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它

踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…, 如此不停的进行下去,

直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、

n, 输出最后那个大王的编号。用程序模拟该过程。

**/

php编码如下:

$a = array(1,2,3,4,5,6,7,8,9,10);

function smonk($arr,$step){

$m = $step;

$total = 0;

while (count($arr)>1) {

$len = count($arr)+$total;

if($step>=$len){//数组重新开始,并且数组下表重新计算

while ($step>=$len) {

$step = $step - $len;

}

$arr = array_values($arr);

$total = 0;

}

//echo $arr[$step] . '
';

unset($arr[$step]);

$step =$step+$m;

$total ++;

}

echo isset($arr[0])?$arr[0]:$arr[1];

}

smonk($a,2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
然后,从第一个猴子开始报数,每次报到n的猴子出列,剩下的猴子继续按顺序报数。如此循环,直到只剩下一只猴子为止,该猴子即为大王。 首先我们需要明确几个变量的含义:猴子的总数为m,每次报数到第n只猴子出列,最后剩下的那只猴子编号为x。 我们可以使用循环来模拟猴子大王的过程。首先创建一个长度为m的数组,用来存放猴子编号。然后从第一个猴子开始报数,每次报数到第n只猴子,就将该猴子编号从数组中移除。重复这个过程,直到数组中只剩下一只猴子。最后剩下的那只猴子编号即为x。 具体的实现步骤如下: 1. 创建一个长度为m的数组,保存猴子编号编号范围为0到m-1。 2. 初始化报数的位置为0,即从数组的第一个元素开始报数。 3. 使用一个循环,每轮循环从当前位置开始报数,报数到第n只猴子,移除该猴子编号。 4. 更新当前位置,使其指向下一个猴子。 5. 当数组中只剩下一个元素时,循环结束,该元素即为大王编号x。 6. 返回大王编号x。 例如,当猴子总数m为5,报数的位置n为3时: 1. 创建数组[0, 1, 2, 3, 4]。 2. 从0位置开始报数,报数到第3只猴子,移除编号为2的猴子。 3. 数组变为[0, 1, 3, 4],当前位置更新为3。 4. 从3位置开始报数,报数到第3只猴子,移除编号为4的猴子。 5. 数组变为[0, 1, 3],当前位置更新为0。 6. 从0位置开始报数,报数到第3只猴子,移除编号为0的猴子。 7. 数组变为[1, 3],当前位置更新为1。 8. 从1位置开始报数,报数到第3只猴子,移除编号为3的猴子。 9. 数组变为[1],当前位置更新为0。 10. 数组中只剩下一个元素,循环结束,大王编号为1。 因此,当猴子总数m为5,报数位置n为3时,出的大王编号为1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值