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 相关文章推荐
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 PHP
Php Mssql操作简单封装支持存储过程
Dec 11 PHP
php 中英文语言转换类
Sep 07 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
PHP 微信支付类 demo
Nov 30 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 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
一个php作的文本留言本的例子(三)
2006/10/09 PHP
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
offsetParent 算法分析
2010/04/05 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
亲子读书活动方案
2014/02/22 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
办公室禁烟通知
2015/04/23 职场文书
楚门的世界观后感
2015/06/03 职场文书
大学生暑期实践报告
2015/07/13 职场文书
教师节主题班会教案
2015/08/17 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
Python实现抖音热搜定时爬取功能
2022/03/16 Python