约瑟夫环问题的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表单提交问题的解决方法
Apr 12 PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
学习php开源项目的源码指南
Dec 21 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
php curl 获取https请求的2种方法
Apr 27 PHP
PHP中类的继承和用法实例分析
May 24 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
PHP CURL中传递cookie的方法步骤
May 09 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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中的替代语法简介
2014/08/22 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
window.print打印指定div实例代码
2013/12/13 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
python调用百度REST API实现语音识别
2018/08/30 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
高中同学会活动方案
2014/08/14 职场文书
2015年大学生工作总结
2015/04/21 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
化工生产实习心得体会
2016/01/22 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
JavaScript实现音乐播放器
2022/08/14 Javascript