约瑟夫环问题的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 28 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
php 模拟POST提交的2种方法详解
Jun 17 PHP
php创建sprite
Feb 11 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 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
获取URL文件名后缀
2013/10/24 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
一则python3的简单爬虫代码
2014/05/26 Python
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
《自选商场》教学反思
2014/02/14 职场文书
机关办公室岗位职责
2014/04/16 职场文书
开工典礼策划方案
2014/05/23 职场文书
工商管理专业自荐信
2014/06/03 职场文书
雷峰塔导游词
2015/02/09 职场文书
教师工作态度自我评价
2015/03/05 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
教师素质教育心得体会
2016/01/19 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技