约瑟夫环问题的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中使用Oracle数据库(1)
Oct 09 PHP
PHP实现MVC开发得最简单的方法――模型
Apr 10 PHP
洪恩在线成语词典小偷程序php版
Apr 20 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 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
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
永不消失的title提示代码
2007/02/15 Javascript
关于JavaScript的一些看法
2009/05/27 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
晨会主持词
2014/03/17 职场文书
女生抽烟检讨书
2014/10/05 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
python百行代码实现汉服圈图片爬取
2021/11/23 Python
无线电通信名词解释
2022/02/18 无线电
Python绘制散乱的点构成的图的方法
2022/04/21 Python