约瑟夫环问题的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生成网页快照 不用COM不用扩展.
Feb 11 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
yii2 数据库读写分离配置示例
Feb 10 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
php mysql 封装类实例代码
2016/09/18 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
js运动事件函数详解
2016/10/21 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
Python 备份程序代码实现
2017/03/06 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
python实现静态web服务器
2019/09/03 Python
Python进程池Pool应用实例分析
2019/11/27 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
python中字符串的编码与解码详析
2020/12/03 Python
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
一套VC试题
2015/01/23 面试题
考试作弊被抓检讨书
2014/01/10 职场文书
运动会的口号
2014/06/09 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
2016党校学习心得体会
2016/01/07 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Javascript 解构赋值详情
2021/11/17 Javascript