php解决约瑟夫环算法实例分析


Posted in PHP onSeptember 30, 2019

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

今天偶遇一道算法题

“约瑟夫环”是一个数学的应用问题:一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把它踢出去…,如此不停的进行下去, 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

方法一:递归算法

function killMonkey($monkeys , $m , $current = 0){
  $number = count($monkeys);
  $num = 1;
  if(count($monkeys) == 1){
    echo $monkeys[0]."成为猴王了";
    return;
  }
  else{
    while($num++ < $m){
      $current++ ;
      $current = $current%$number;
    }
    echo $monkeys[$current]."的猴子被踢掉了<br/>";
    array_splice($monkeys , $current , 1);
    killMonkey($monkeys , $m , $current);
  }
}
$monkeys = array(1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 , 10); //monkeys的编号
$m = 3; //数到第几只猴子被踢出
killMonkey($monkeys , $m);

运行结果:

3的猴子被踢掉了
6的猴子被踢掉了
9的猴子被踢掉了
2的猴子被踢掉了
7的猴子被踢掉了
1的猴子被踢掉了
8的猴子被踢掉了
5的猴子被踢掉了
10的猴子被踢掉了
4成为猴王了

方法二:线性表应用

最后这个算法最牛,

哦,是这样的,每个猴子出列后,剩下的猴子又组成了另一个子问题。只是他们的编号变化了。第一个出列的猴子肯定是a[1]=m(mod)n(m/n的余数),他除去后剩下的猴子是a[1]+1,a[1]+2,…,n,1,2,…a[1]-2,a[1]-1,对应的新编号是1,2,3…n-1。设此时某个猴子的新编号是i,他原来的编号就是(i+a[1])%n。于是,这便形成了一个递归问题。假如知道了这个子问题(n-1个猴子)的解是x,那么原问题(n个猴子)的解便是:(x+m%n)%n=(x+m)%n。问题的起始条件:如果n=1,那么结果就是1。

function yuesefu($n,$m) {
  $r=0;
  for($i=2; $i<=$n; $i++) {
    $r=($r+$m)%$i;
  }
  return $r+1;
}
echo yuesefu(10,3)."是猴王";

运行结果:

4是猴王

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

PHP 相关文章推荐
PHP 和 MySQL 开发的 8 个技巧
Jan 02 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
php常用Stream函数集介绍
Jun 24 PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 #PHP
laravel-admin 在列表页添加自定义按钮的例子
Sep 30 #PHP
Laravel框架控制器的request与response用法示例
Sep 30 #PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 #PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 #PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 #PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 #PHP
You might like
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
PHP通用检测函数集合
2006/11/25 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
jQuery 查找元素操作实例小结
2019/10/02 jQuery
js实现图片上传到服务器和回显
2020/01/19 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
用pycharm开发django项目示例代码
2019/06/13 Python
在python中用url_for构造URL的方法
2019/07/25 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
教师新年寄语
2014/04/03 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
职位说明书范文
2014/05/07 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
运动会入场词
2015/07/18 职场文书
导游词之西递宏村
2019/12/10 职场文书
MongoDB支持的索引类型
2022/04/11 MongoDB