php基础找猴王游戏

【功能分析】

一群猴子排成一圈,按"1,2,..., n "依次编号。将需要踢出的猴子编号设为 m ,从第1只猴子开始数,当数到第 m 只时,把它踢出圈;其后的猴子再从1开始数,数到第 m 只时,再次把它踢出圈。按照此方式不停地进行下去,直到剩下最后一只猴子,这只猴子就是要找的猴王。具体需求如下所示。

.编写函数模拟找猴王的游戏。

.根据用户输入的 m 和 n ,指定被踢猴子的编号和猴子的总数。

.展示猴子的总数 n 、被踢的猴子编号 m 和猴王的编号。

【功能实现】

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>寻找猴王——FindMonkeyKing.php</title>

</head>

<body>

  1. 编写找猴王游戏的函数

创建monkey.php文件,编写king()函数实现游戏功能代码如下。

<?php

// 使用function关键字定义一个函数

function king($n,$m){

$monkey=range(1, $n);

for ($i=1; count($monkey)>1 ; $i++) {

$head=array_shift($monkey);

if ($i%$m!=0) {

array_push($monkey, $head);

#

}

}

return['total'=>$n,'kick'=>$m,'king'=>$monkey[0]];

}

$aa=king(20,7);

?>

<table width="300px" align="center" bgcolor="#ccc">

  1. 展示游戏结束

在monkey.php中展示找到的猴王编号,具体如下所示。

<tr><td colspan="2" align="center">寻找猴王</td></tr>

<tr><td>猴子总数:</td><td><?php echo $aa['total']; ?></td></tr>

<tr><td>猴王是编号:</td><td><?php echo $aa['king']; ?> </td></tr>

<tr><td>被踢出的第m只猴子</td><td>

<?php echo $aa['kick']; ?>

</td></tr>

</table>

</body>

</html>

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
猴王游戏是一个古老的数学问题,也被称为约瑟夫问题。在PHP中,可以使用一个数组来模拟这个游戏。 首先,我们需要定义一个包含所有参与游戏的人的数组,然后定义一个计数器,用来记录当前报数的人的位置。接下来,我们以以下步骤重复进行,直到只剩下最后一个人: 1. 从计数器指向的位置开始,数到第m个人,将其从数组中删除。 2. 将计数器加1,从下一个位置开始重新数数,重复第1步。 最后,剩下的那个人就是猴王。 下面是一个实现猴王游戏PHP代码: ```php function findMonkeyKing($n, $m) { $arr = range(1, $n); $count = 0; while (count($arr) > 1) { $count++; $head = array_shift($arr); // 取出队首元素 if ($count % $m != 0) { array_push($arr, $head); // 如果不是第m个人,则把队首元素放到队尾 } } return $arr[0]; } $n = 10; // 参与游戏的人数 $m = 3; // 报数到第m个人出列 $monkeyKing = findMonkeyKing($n, $m); echo "The monkey king is No.{$monkeyKing}.\n"; ``` 在上面的代码中,我们定义了一个findMonkeyKing()函数,它接受两个参数:参与游戏的人数$n和报数到第几个人出列$m。函数内部使用一个while循环来模拟猴王游戏的过程,直到只剩下最后一个人。在每一轮循环中,我们从数组中取出队首元素,如果这个元素不是第m个人,就将它放回到队尾。如果这个元素是第m个人,就将它从数组中删除。最后,当数组中只剩下一个元素时,返回这个元素的值,即为猴王的编号。 在示例中,我们将$n设为10,$m设为3,表示有10个人参与游戏,每报数到第3个人就出列。最后输出猴王的编号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值