PHP实现的猴王算法(猴子选大王)示例


Posted in PHP onApril 30, 2018

本文实例讲述了PHP实现的猴王算法。分享给大家供大家参考,具体如下:

<?php
function getKingMokey($n, $m)
{
    $monkey[0] = 0;
    //将1-n只猴子顺序编号 入数组中
    for($i= 1; $i<= $n; $i++)
    {
        $monkey[$i] = $i;
    }
    $len = count($monkey);
    //循环遍历数组元素(猴子编号)
    for($i= 0; $i< $len; $i= $i)
    {
       $num = 0;
       foreach($monkey as $key => $value)
       {
        if($value == 0) continue;
        $num++;
        $values = $value;
       }
       //若只剩一只猴子 则输出该猴子编号(数组元素值) 并退出循环
       if($num == 1)
       {
          echo $values;
          exit;
       }
       //将第$i只猴子踢出队伍(相应数组位置元素值设为0)
       $monkey[$i] = 0;
       //打印该猴子位置
       echo $i."";
       //设置计数器
       for($j= 1; $j<= $m; $j++)
       {
          //猴子编号加一,遍历下一只猴子
          $i++;
          //若该猴子未被踢出队伍,获取下一只猴子编号
          if($monkey[$i] > 0) continue;
          //若元素值为0,则猴子已被踢出队伍,进而循环取下一只猴子编号
          if($monkey[$i] == 0)
          {
              //取下一只猴子编号
              for($k= $i; $k< $len; $k++)
              {
                  //值为0,编号加1
                  if($monkey[$k] == 0) $i++;
                  //否则,编号已取得,退出
                  if($monkey[$k] > 0) break;
              }
          }
          //若编号大于猴子个数,则从第0只猴子开始遍历(数组指针归零)
          //步骤同上
          if($i == $len) $i = 0;
          //同上步骤,获取下一只猴子编号
          if($monkey[$i] == 0)
          {
             for($k= $i; $k< $len; $k++)
             {
                  if($monkey[$k] == 0) $i++;
                 if($monkey[$k] > 0) break;
             }
          }
      }
   }
}
//猴子个数
$n = 10;
//踢出队伍的编号间隔值
$m = 3;
//调用猴王获取函数
getKingMokey($n, $m);
?>

运行结果:

036927185104

用递归的算法

$monkeys = array(1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 , 10); //monkey的编号
$m = 4; //数到第几只的那只猴子被踢出去
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);
    }
}
killMonkey($monkeys , $m);

运行结果:

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

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

PHP 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
php面向对象全攻略 (四)构造方法与析构方法
Sep 30 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
php GeoIP的使用教程
Mar 09 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
typecho插件编写教程(五):核心代码
May 28 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 #PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 #PHP
PHP实现通过strace定位故障原因的方法
Apr 29 #PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 #PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 #PHP
PHP实现转盘抽奖算法分享
Apr 15 #PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 #PHP
You might like
关于js与php互相传值的介绍
2013/06/25 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
js命名空间写法示例
2015/12/18 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
jQuery使用方法
2017/02/04 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Python将string转换到float的实例方法
2019/07/29 Python
python中使用while循环的实例
2019/08/05 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Python过滤序列元素的方法
2020/07/31 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
党组织领导班子整改方案
2014/10/25 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
优质服务标语口号
2015/12/26 职场文书