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 REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
php 中文处理函数集合
Aug 27 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
php文档更新介绍
Jul 22 PHP
php cc攻击代码与防范方法
Oct 18 PHP
使用php实现下载生成某链接快捷方式的解决方法
May 07 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
Oct 15 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生成随机密码的几种方法
2011/01/17 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python 登录网站详解及实例
2017/04/11 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
pycharm快捷键汇总
2020/02/14 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
Django框架models使用group by详解
2020/03/11 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
学员自我鉴定
2014/03/19 职场文书
食品安全演讲稿
2014/09/01 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书