当前位置:首页 > PHP教程 > php高级应用 > 列表

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. 循环

  1. function circle($arr,$idx,$k){ 
  2.   for($i=0;$i<$idx;$i++){ 
  3.     $tmp = array_shift($arr); 
  4.     array_push($arr,$tmp); 
  5.   } 
  6.   $j = 1; 
  7.   while(count($arr) > 0){ 
  8.     $tmp = array_shift($arr); 
  9.     if($j++%$k == 0){ 
  10.       echo $tmp."\n"
  11.     }else
  12.       array_push($arr,$tmp); 
  13.     } 
  14.   } 
  15. $arr = array(1,2,3,4,5,6,7,8,9,10,11,12); 
  16. $idx = 3; 
  17. $k = 4; 
  18. circle($arr,$idx,$k); 

运行结果:

7 11 3 8 1 6 2 10 9 12 5 4

2. 递归

  1. function circle($arr,$idx,$k){ 
  2.   $len = count($arr); 
  3.   $i = 1; 
  4.   if($len == 1){ 
  5.     echo $arr[0]."\n"
  6.     return ; 
  7.   } else { 
  8.     while($i++ < $k){ 
  9.       $idx++; 
  10.       $idx = $idx%$len
  11.     } 
  12.     echo $arr[$idx]."\n"
  13.     array_splice($arr,$idx,1); 
  14.     circle($arr,$idx,$k); 
  15.   } 
  16. $arr = [1,2,3,4,5,6,7,8,9,10,11,12]; 
  17. $idx = 3; 
  18. $k = 4; 
  19. circle($arr,$idx,$k); 

运行结果:7 11 3 8 1 6 2 10 9 12 5 4

Tags: PHP约瑟夫环

分享到: