约瑟夫环问题的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 disk_free_space 返回目录可用空间
May 10 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
PHP中计算字符串相似度的函数代码
Dec 29 PHP
md5 16位二进制与32位字符串相互转换示例
Dec 30 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
Jul 11 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
Laravel 5 框架入门(一)
Apr 09 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
如何分别全角和半角以避免乱码
2006/10/09 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
php判断linux下程序问题实例
2015/07/09 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
js轮播图代码分享
2016/07/14 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
js闭包学习心得总结
2018/04/17 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
python爬取m3u8连接的视频
2018/02/28 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
大二学生职业生涯规划书
2014/02/05 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
班班通校本培训方案
2014/03/12 职场文书
大学生见习报告范文
2014/11/03 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
安全生产协议书
2016/03/22 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js