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简单命令代码集锦
Sep 24 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
php中大括号作用介绍
Mar 22 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
成为好程序员必须避免的5个坏习惯
Jul 04 PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 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与MySQL交互使用详解
2006/10/09 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
JS request函数 用来获取url参数
2010/05/17 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
前端性能优化及技巧
2016/05/06 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
web打印小结
2017/01/11 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
Python操作json的方法实例分析
2018/12/06 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
C#中的验证控件有几种
2014/03/08 面试题
大二学生职业生涯规划书
2014/02/05 职场文书
公司介绍信范文
2015/01/31 职场文书
2015年测量员工作总结
2015/05/23 职场文书
技能培训通讯稿
2015/07/18 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
创业计划书之电动车企业
2019/10/11 职场文书