思路:一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。
<?php
//(约瑟夫环)猴子选大王
// 思路:一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。
function king($n,$m){
$mokey = range(1, $n); // 创建一个包含从1到$n之间的元素范围的数组
$i = 0;
while (count($mokey) >1) {
$i += 1;
$head = array_shift($mokey); // 一个个出列最前面的猴子
if ($i % $m !=0) {
// 如果不是m的倍数,则把猴子返回尾部,否则就抛掉,也就是出列
array_push($mokey, $head);
}
}
return $mokey[0];
}
// 测试
echo king(10,7);
这是一个使用PHP编写的约瑟夫环问题解决方案,模拟了一群猴子按编号排列,每隔m只将一只猴子踢出,直至剩下一只大王的过程。通过创建包含1到n编号的猴子数组,不断移除和添加猴子,最终返回大王的编号。代码中定义了一个名为king的函数,接收两个参数n和m,用于测试的示例显示了当有10只猴子,每数到7就踢出一只时,最后的大王编号为3。
104

被折叠的 条评论
为什么被折叠?



