PHP实现约瑟夫环问题的方法分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-22 13:09:48 浏览: 评论:0
这篇文章主要介绍了PHP实现约瑟夫环问题的方法,结合实例形式分析了php使用循环与递归实现约瑟夫环的相关操作技巧,需要的朋友可以参考下。
本文实例讲述了PHP实现约瑟夫环问题的方法,分享给大家供大家参考,具体如下:
一、概述
先来看看网上比较常见的约瑟夫环问题描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知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
Tags: PHP约瑟夫环
- 上一篇:PHP实现单链表翻转操作示例
- 下一篇:浅谈PHP实现大流量下抢购方案
相关文章
- ·PHP实现的基于单向链表解决约瑟夫环问题示例(2021-08-11)
- ·php基于环形链表解决约瑟夫环问题示例(2021-08-18)
- ·php解决约瑟夫环算法实例分析(2021-12-26)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)