约瑟夫环问题的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 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
php实现分页工具类分享
Jan 09 PHP
php不写闭合标签的好处
Mar 04 PHP
php数组编码转换示例详解
Mar 11 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
Smarty保留变量用法分析
May 23 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
php字符串操作常见问题小结
Oct 11 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
php传值和传引用的区别点总结
Nov 19 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
javascript定时保存表单数据的代码
2011/03/17 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python实现二叉搜索树
2016/02/03 Python
Python对数据库操作
2016/03/28 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
python flask中静态文件的管理方法
2018/03/20 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python实现电子产品商店
2019/02/26 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
应用化学专业本科生求职信
2013/09/29 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书