php对称算法示例(php解决约瑟夫环算法实例分析)
类别:编程学习 浏览量:1109
时间:2021-10-19 06:27:05 php对称算法示例
php解决约瑟夫环算法实例分析本文实例讲述了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程序设计有所帮助。
原文链接:https://blog.csdn.net/weixin_36851500/article/details/83515632
您可能感兴趣
- php导出excel使用方法(PHP使用ajax的post方式下载excel文件简单示例)
- dede模板手机端显示设置(DEDE模板中如何运行php脚本和变量在需要操作数据库字段时)
- php微信支付步骤(PHP实现微信提现企业付款到零钱)
- php入门教程源代码修改教程(php+js实现的无刷新下载文件功能示例)
- thinkphp伪静态实例(thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解)
- phpzip压缩原理(PHP生成zip压缩包的常用方法示例)
- phpdate函数使用方法(PHP中strtr与str_replace函数运行性能简单测试示例)
- php运行模式图解(php策略模式简单示例分析区别于工厂模式)
- 用php调用函数的换行(php中关于换行的实例写法)
- php 依赖注入(详解php命令注入攻击)
- php性能比较(php使用yield对性能提升的测试实例分析)
- php字符串教程学习(php学习笔记之字符串常见操作总结)
- php如何设置命名空间(PHP进阶学习之命名空间基本用法分析)
- php重定向网页(phpStudy V8设置301重定向跳转的实现方法)
- dedecms5.7使用教程(dedecms v5.7提示php.ini register_globals must is Off错误的解决方法)
- 自己在做项目过程中的php知识(PHP+Oracle本地开发环境搭建方法详解)
- 今天要吃什么(今天要吃什么菜好)
- 网红直播可以赚很多钱吗(网红直播可以赚很多钱吗)
- 今天是什么日子(今天是什么日子有什么特殊意义吗)
- 这里输入关键词(怎么输入关键词搜索)
- 34岁的舒畅,就这样走到了末路,不知会不会后悔15年前的草率决定(就这样走到了末路)
- 不走心的古装造型 舒畅 毁容式 出演,萧蔷雷出新高度(不走心的古装造型)
热门推荐
- sql server 进阶教程(SQL Server游标的介绍与使用)
- dedecms标签怎么用(dedecms三级栏目调用方法)
- 云服务器实际应用优缺点(云服务器优点有哪些?云服务器缺点你知道吗?)
- <i>和<em>、<b>和<strong>的区别
- python opencv 标记目标(使用Python的OpenCV模块识别滑动验证码的缺口推荐)
- python语句三元运算符(Python中三元表达式的几种写法介绍)
- nginx报网络连接错误(Nginx 502 Bad Gateway错误原因及解决方案)
- vue 动态绑定指令(vue动态绑定图标的完整步骤)
- 搭建好的ftp服务器在哪里(如何在自己的电脑上搭建FTP服务器?)
- php对象模型(PHP数据对象映射模式实例分析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9