约瑟夫环问题的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的输入输出流
Feb 14 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
PHP分页函数代码(简单实用型)
Dec 02 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
php基于表单密码验证与HTTP验证用法实例
Jan 06 PHP
非常重要的php正则表达式详解
Jan 04 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 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编码转换
2012/11/05 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
js三种排序算法分享
2012/08/16 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
element el-input directive数字进行控制
2018/10/11 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
保安员岗位职责
2013/11/17 职场文书
大学活动策划书范文
2014/01/10 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
工作迟到检讨书
2014/02/21 职场文书
《学会合作》教学反思
2014/04/12 职场文书
解除劳动合同证明书
2014/09/26 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
个人作风建设总结
2014/10/23 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python
css弧边选项卡的项目实践
2023/05/07 HTML / CSS