PHP使用栈解决约瑟夫环问题算法示例

2025-05-29 0 37

本文实例讲述了PHP使用解决约瑟夫环问题算法。分享给大家供大家参考,具体如下:

约瑟夫环问题: 39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀。然后下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74
<?php

class ArrayStack

{

private $size;

private $stack = [];

public function __construct(){}

public function buildStack($num){

$this->size = $num;

$index = 0;

while($index ++ < $this->size)

{

$this->stack[] = $index;

}

}

public function pop(){

$item = array_shift($this->stack);

$this->size = count($this->stack);

return $item;

}

public function push($item)

{

$this->stack[] = $item;

$this->size = count($this->stack);

}

public function size()

{

return $this->size;

}

public function stack()

{

return $this->stack;

}

}

interface Joseph

{

public function handle($num = 0, $step = 0, $survivors = 0);

}

class StackJoseph implements Joseph

{

protected $stack;

protected $num;

protected $step;

public function __construct(ArrayStack $stack)

{

$this->stack = $stack;

}

public function handle($num = 0, $step = 0, $survivors = 0)

{

// TODO: Implement handle() method.

$this->stack->buildStack($num);

$i = 0;

while($this->stack->size() > $survivors)

{

$pop = $this->stack->pop();

if(($i + 1) % $step !== 0)

{

$this->stack->push($pop);

$i ++;

}

else

{

$i = 0;

}

}

return $this->stack->stack();

}

}

function joseph($num, $step, $survivorsNum)

{

$arrayStack = new ArrayStack();

$joseph = new StackJoseph($arrayStack);

return $joseph->handle($num, $step, $survivorsNum);

}

print_r(joseph(41, 3, 2));

执行结果:

?

1

2

3

4

5
Array

(

[0] => 16

[1] => 31

)

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

原文链接:http://blog.csdn.net/alian_c/article/details/53319319

收藏 (0) 打赏

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

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

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

快网idc优惠网 建站教程 PHP使用栈解决约瑟夫环问题算法示例 https://www.kuaiidc.com/93819.html

相关文章

发表评论
暂无评论