一群猴子排成一圈问,为啥子我这个段子要短些,请鉴证一下合理不?

问:一群猴子排成一圈,按1,2,...,n依次编号。  然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,  再数到第m只,在把它踢出去...,如此不停的进行下去,  直到最后只剩下一只猴子为止,那只猴子就叫做大王。

 求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

<?php
//初始化执行
$n = 8;
for ($i = 0; $i< $n;$i++) {
	$arr[] = $i;
}

//开始执行
$z = 0;
$m = 4;
while (count($arr) > 1) {
	foreach ($arr as $k => $v) {
		if ($z == $m) {
			unset($arr[$k]);
			$z = 0;
		}
		$z++;
	}
}
print_r($arr);


Hadoop大数据云计算技术群:342391093



然后,从第一个猴子开始报数,每次报到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。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值