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 相关文章推荐
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
深入浅析PHP无限极分类的案例教程
May 09 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
详解php实现页面静态化原理
Jun 21 PHP
利用PHP实现开心消消乐的算法示例
Oct 12 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 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获取url的函数代码
2011/08/02 PHP
php+mysql实现无限级分类
2015/11/11 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
PDO::rollBack讲解
2019/01/29 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
javascript操作css属性
2013/12/30 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
vue实现一拉到底的滑动验证
2019/07/25 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
解析Python中的异常处理
2015/04/28 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
python 2.7.14安装图文教程
2018/04/08 Python
python脚本实现验证码识别
2018/06/07 Python
python字典的常用方法总结
2019/07/31 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
协议书样本
2014/04/23 职场文书
2014年教师业务工作总结
2014/12/19 职场文书