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 多进程 解决难题
Jun 22 PHP
PHP教程 变量定义
Oct 23 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
php中类和对象:静态属性、静态方法
Apr 09 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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 获取一个月第一天与最后一天的代码
2010/05/16 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
javascript实现日历效果
2019/06/17 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
简单介绍Python中的JSON模块
2015/04/08 Python
Python中join和split用法实例
2015/04/14 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
python django生成迁移文件的实例
2019/08/31 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
人事专员岗位职责范本
2014/03/04 职场文书
应届生自荐信
2014/06/30 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
建筑工程催款函
2015/06/24 职场文书