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 相关文章推荐
substr()函数中文版
Oct 09 PHP
php数据库连接时容易出错的特殊符号问题
Sep 01 PHP
php生成zip压缩文件的方法详解
Jun 09 PHP
php对数组排序代码分享
Feb 24 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
php页面缓存方法小结
Jan 10 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
利用ajax+php实现商品价格计算
Mar 31 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概述.
2006/10/09 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
django框架ModelForm组件用法详解
2019/12/11 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
广告学专业自荐信范文
2014/02/24 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
2014年绿化工作总结
2014/12/09 职场文书
2015入党自荐书范文
2015/03/05 职场文书
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL