PHP实现约瑟夫环问题的方法分析

2025-05-29 0 24

本文实例讲述了PHP实现约瑟夫环问题的方法。分享给大家供大家参考,具体如下:

一、概述

先来看看网上比较常见的约瑟夫环问题描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。

二、实现代码

1. 循环

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
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);

运行结果:

?

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

2. 递归

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
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);

运行结果:

?

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

希望本文所述对大家PHP程序设计有所帮助。

原文链接:http://blog.csdn.net/u013474436/article/details/78697002

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP实现约瑟夫环问题的方法分析 https://www.kuaiidc.com/93224.html

相关文章

发表评论
暂无评论