PHP实现约瑟夫环问题的方法分析
2017-12-07 10:28
681 查看
一、概述
先来看看网上比较常见的约瑟夫环问题描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。
二、实现代码
1. 循环
function circle($arr,$idx,$k){ for($i=0;$i<$idx;$i++){ $tmp = array_shift($arr); array_push($arr,$tmp); } $j = 1; while(count($arr) > 0){ $tmp = array_shift($arr); if($j++%$k == 0){ echo $tmp."\n"; }else{ array_push($arr,$tmp); } } } $arr = array(1,2,3,4,5,6,7,8,9,10,11,12); $idx = 3; $k = 4; circle($arr,$idx,$k);
运行结果:
7 11 3 8 1 6 2 10 9 12 5 4
2. 递归
function circle($arr,$idx,$k){ $len = count($arr); $i = 1; if($len == 1){ echo $arr[0]."\n"; return ; } else { while($i++ < $k){ $idx++; $idx = $idx%$len; } echo $arr[$idx]."\n"; array_splice($arr,$idx,1); circle($arr,$idx,$k); } } $arr = [1,2,3,4,5,6,7,8,9,10,11,12]; $idx = 3; $k = 4; circle($arr,$idx,$k);
运行结果:
7 11 3 8 1 6 2 10 9 12 5 4
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- PHP开发中解决并发问题的几种实现方法分析
- ajax+php实现用户登录中的问题(1)略谈XMLHTTP中setRequestHeader方法和参数(转)
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 基于php实现长连接的方法与注意事项的问题
- php模拟登陆的实现方法分析
- C语言,数组实现约瑟夫环问题(两种方法)
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- php实现约瑟夫问题的方法小结
- php优化及高效提速问题的实现方法
- php模拟登陆的实现方法分析
- php模拟登陆的两种实现方法分析
- PHP调用存储过程返回值不一致问题的解决方法分析
- php模拟登陆的两种实现方法分析
- php单例模式实现方法分析
- PHP用SAX解析XML的实现代码与问题分析
- 基于php实现长连接的方法与注意事项的问题
- mysql+php实现选课系统中遇到的问题及解决方法
- php优化及高效提速问题的实现方法第1/2页
- php单例模式实现方法分析
- 对于php实现soap代理的一个常见问题:Class 'SoapClient' not found in PHP的处理方法