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


Posted in PHP onAugust 27, 2017

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

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

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

执行结果:

Array
(
  [0] => 16
  [1] => 31
)

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

PHP 相关文章推荐
使用php+xslt在windows平台上
Oct 09 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
php ios推送(代码)
Jul 01 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 #PHP
PHP实现的简单sha1加密功能示例
Aug 27 #PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 #PHP
详解PHP swoole process的使用方法
Aug 26 #PHP
Yii2框架可逆加密简单实现方法
Aug 25 #PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 #PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 #PHP
You might like
PHP HTML代码串 截取实现代码
2009/06/29 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
经管应届生求职信
2013/11/17 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
终止劳动合同协议书
2014/04/14 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python
springboot读取nacos配置文件
2022/05/20 Java/Android