约瑟夫环问题的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
PHP4实际应用经验篇(5)
Oct 09 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
简单谈谈PHP中的trait
Feb 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下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
jQuery timers计时器简单应用说明
2010/10/28 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
编程语言Python的发展史
2014/09/26 Python
Python解析最简单的验证码
2016/01/07 Python
python常用函数详解
2016/09/13 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
水利学院求职自荐书
2014/02/01 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
减负增效提质方案
2014/05/23 职场文书
人口与计划生育责任书
2015/05/09 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
python状态机transitions库详解
2021/06/02 Python
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python