约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数


Posted in PHP onOctober 12, 2010

来看看这个问题的详细描述:
view sourceprint?一群猴子排成一圈,按 1,2,...,n 依次编号。然后从第 1 只开始数,数到第 m 只,把它踢出圈,从它后面再开始数, 再数到第 m 只,在把它踢出去...,如此不停的进行下去, 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入 m、n, 输出最后那个大王的编号。
刚开始构思的时候想使用 PHP 数组来实现(当然最后还是使用的数组),然后模拟一个数组的内部指针,结果发现想模拟一个“数组指针”不是那么的容易,因为涉及到很多“指针”的操作,最后猛然想到,PHP 的数组本身就是有内部指针的,为什么还要去“造车轮子”呢?!于是乎~看代码:

function getKingMonkey($n, $m) 
{ 
$a = array();//声明内部数组 
for($i = 1; $i <= $n; $i ++) 
{ 
$a[$i] = $i;//这一步是对号入座 
} 
reset($a);//为了严谨,我们来一个 reset() 函数,其实也可以省去 
while(count($a) > 1)//主循环开始,这里使用的判别条件是数组元素的个数等于 1 的时候停止循环 
{ 
for($counter = 1; $counter <= $m; $counter++)//嵌套的 for 循环,用来“踢出”数到 m 的猴子 
{ 
if(next($a)){//如果存在 next 元素 
if($counter == $m) 
{ 
unset($a[array_search(prev($a), $a)]);//当数到 m 时,使用 unset() 删除数组元素 
} 
} 
else//如果不存在 next 元素 
{ 
reset($a);//则数组的第一个元素充当 next 元素 
if($counter == $m) 
{ 
unset($a[array_search(end($a), $a)]);//当数到 m 时,使用 unset() 删除数组元素,注意这里是 end() 
reset($a);//记得让数组内部指针“归位” 
} 
} 
} 
} 
return current($a); 
}

测试一下下:
echo "猴子大王的编号为:" . getKingMonkey(100, 17);
输出为:
view sourceprint?猴子大王的编号为:53
The End~
PHP 相关文章推荐
PHP校验ISBN码的函数代码
Jan 17 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
php中preg_match的isU代表什么意思
Oct 01 PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
php中strtotime函数性能分析
Nov 20 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 #PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 #PHP
献给php初学者(入门学习经验谈)
Oct 12 #PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 #PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 #PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 #PHP
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 #PHP
You might like
第八节--访问方式
2006/11/16 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
numpy中矩阵合并的实例
2018/06/15 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
python下载微信公众号相关文章
2019/02/26 Python
详解Python self 参数
2019/08/30 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
高山背包:High Sierra
2017/11/23 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
承诺书模板大全
2015/05/04 职场文书
会议室管理制度范本
2015/08/06 职场文书