约瑟夫环问题的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安装攻略:常见问题解答(一)
Oct 09 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
js代码实现微博导航栏
Jul 30 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 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有序表查找之插值查找算法示例
2018/02/10 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
python k-近邻算法实例分享
2014/06/11 Python
python中黄金分割法实现方法
2015/05/06 Python
python返回昨天日期的方法
2015/05/13 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
详解Python中heapq模块的用法
2016/06/28 Python
Django框架多表查询实例分析
2018/07/04 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
Python二元算术运算常用方法解析
2020/09/15 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
4s店总经理岗位职责
2013/12/31 职场文书
教育科研先进个人材料
2014/01/26 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
护士求职自荐信
2015/03/25 职场文书