php实现猴子选大王问题算法实例


Posted in PHP onApril 20, 2015

本文实例讲述了php实现猴子选大王问题算法。分享给大家供大家参考。具体分析如下:

一、问题:

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

设计并编写程序,实现如下功能:
(1)   要求由用户输入开始时的猴子数$n、报数的最后一个数$m。
(2)   给出当选猴王的初始编号。

二、解决方法:

/**
 * @param int $n 开始时的猴子数量
 * @param int $m 报道的最后一个数
 *(报到这个数的猴子被淘汰,然后下一个猴子重新从①开始报数) 
 * @return int 猴子的初始编号 
 */
function monkeySelectKing($n,$m)
{
 //猴子的初始数量不能小于2
 if ($n<2)
 {
 return false;
 }
 
 $arr=range(1,$n);
 //将猴子分到一个数组里, 数组的值对应猴子的初始编号
 $unsetNum=0;
 //定义一个变量,记录猴子的报数
 
 for ($i = 2; $i <=$n*$m ; $i++)
 //总的循环次数不知道怎么计算,
 {
 //不过因为循环中设置了return,所以$m*$len效率还可以
 foreach ($arr as $k => $v)
 {
  $unsetNum++; //每到一个猴子, 猴子报数+1
 
 //当猴子的报数等于淘汰的数字时:淘汰猴子(删除数组元素)
 //报数归0(下一个猴子从1开始数)
  if ($unsetNum==$m) 
  {
//  echo "<pre>";//打开注释,可以看到具体的淘汰过程
//  print_r($arr);
  unset($arr[$k]);
 //淘汰猴子  
  $unsetNum=0;
 //报数归零
  if (count($arr)==1)
 //判断数组的长度, 如果只剩一个猴子, 返回它的值
  {
   return reset($arr);
  }
  }
 }
 }
}
 
var_dump(monkeySelectKing(6, 3));

补充改进算法(该算法更加简洁明了!):

function yuesefu($n,$m) { 
  $r=0; 
  for($i=2; $i<=$n; $i++) {

      $r=($r+$m)%$i; 
  }
  return $r+1; 
} 
print_r(yuesefu(3,3));

希望本文所述对大家的php程序算法设计有所帮助。

PHP 相关文章推荐
网站加速 PHP 缓冲的免费实现方法
Oct 09 PHP
PHP系统流量分析的程序
Oct 09 PHP
用文本文件制作留言板提示(上)
Oct 09 PHP
php 字符转义 注意事项
May 27 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
php转换颜色为其反色的方法
Apr 27 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
php解析xml方法实例详解
May 12 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
php实现倒计时效果
Dec 19 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
php递归删除指定文件夹的方法小结
Apr 20 #PHP
php动态生成缩略图并输出显示的方法
Apr 20 #PHP
PHP随机生成唯一HASH值自定义函数
Apr 20 #PHP
php隐藏实际地址的文件下载方法
Apr 18 #PHP
php实现用于计算执行时间的类实例
Apr 18 #PHP
php递归遍历多维数组的方法
Apr 18 #PHP
php实现二进制和文本相互转换的方法
Apr 18 #PHP
You might like
文件系统基本操作类
2006/11/23 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中的函数用法入门教程
2014/09/02 Python
详解Python中find()方法的使用
2015/05/18 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
python程序控制NAO机器人行走
2019/04/29 Python
什么是设计模式
2012/06/17 面试题
违反学校规定检讨书
2014/01/18 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript