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 相关文章推荐
PHP4引用文件语句的对比
Oct 09 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
Jun 18 PHP
php中AES加密解密的例子小结
Feb 18 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 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中的垃圾回收机制
2015/08/10 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
Angular的$http与$location
2016/12/26 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
Django 2.0版本的新特性抢先看!
2018/01/05 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
python3中sys.argv的实例用法
2020/04/24 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
管理部部长岗位职责
2013/12/05 职场文书
预防煤气中毒方案
2014/06/16 职场文书
2015年校长新年寄语
2014/12/08 职场文书
涨价通知怎么写
2015/04/23 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书