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,不用COM,生成excel文件
Oct 09 PHP
php中cookie的作用域
Mar 27 PHP
php flush类输出缓冲剖析
Oct 19 PHP
20个PHP常用类库小结
Sep 11 PHP
PHP爆绝对路径方法收集整理
Sep 17 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
PHP自定义函数格式化json数据示例
Sep 14 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
初学CAKEPHP 基础教程
2009/11/02 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
python版简单工厂模式
2017/10/16 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
《金子》教学反思
2014/04/13 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
答谢酒会主持词
2015/07/02 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript