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正则
Jul 07 PHP
PHP脚本的10个技巧(6)
Oct 09 PHP
我的论坛源代码(八)
Oct 09 PHP
mysql 全文搜索 技巧
Apr 27 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
PHP递归调用数组值并用其执行指定函数的方法
Apr 01 PHP
yii用户注册表单验证实例
Dec 26 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 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
PHP中for循环语句的几种变型
2007/03/16 PHP
php smarty函数扩展
2010/03/15 PHP
php中spl_autoload详解
2014/10/17 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
Python中的各种装饰器详解
2015/04/11 Python
python实现的jpg格式图片修复代码
2015/04/21 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
python使用tornado实现登录和登出
2018/07/28 Python
python使用matplotlib画饼状图
2018/09/25 Python
python学生管理系统开发
2019/01/30 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
学生自我鉴定范文
2013/10/04 职场文书
优秀员工自荐书范文
2013/12/08 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
小学生保护环境倡议书
2014/05/15 职场文书