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 相关文章推荐
php5 pdo新改动加载注意事项
Sep 11 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
php 一元分词算法
Nov 30 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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
用header 发送cookie的php代码
2007/03/16 PHP
php minixml详解
2008/07/19 PHP
php escape URL编码
2008/12/10 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
python读取注册表中值的方法
2013/04/08 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
python比较两个列表大小的方法
2015/07/11 Python
打包发布Python模块的方法详解
2016/09/18 Python
Python发展简史 Python来历
2019/05/14 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
给领导的致歉信范文
2014/01/13 职场文书
校本教研工作制度
2014/01/22 职场文书
岗位聘任协议书
2015/09/21 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
php png失真的原因及解决办法
2021/10/24 PHP
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫