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 相关文章推荐
杏林同学录(七)
Oct 09 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
比较全的PHP 会话(session 时间设定)使用入门代码
Jun 05 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 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 5.5 新特性
2013/07/02 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
import的本质解析
2017/10/30 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
python 6行代码制作月历生成器
2020/09/18 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
大学生军训自我鉴定
2014/02/12 职场文书
火箭队口号
2014/06/18 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
教师年终个人总结
2015/02/11 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
Redis性能监控的实现
2021/07/09 Redis
Java实现房屋出租系统详解
2021/10/05 Java/Android
Golang 遍历二叉树
2022/04/19 Golang
2022年显卡天梯图(6月更新)
2022/06/17 数码科技