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&amp;&amp;mysql)四
Oct 09 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
Jun 27 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
用PHP代码给图片加水印
Jul 01 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 PHP
PHP中的self关键字详解
Jun 23 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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 fsockopen写的HTTP下载的类
2007/02/22 PHP
php缓冲输出实例分析
2015/01/05 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
python实现rsa加密实例详解
2017/07/19 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
python实现最速下降法
2020/03/24 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
垃圾回收的优点和原理
2014/05/16 面试题
职工运动会邀请函
2014/01/19 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
文秘自荐信
2014/06/28 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
小学家长意见怎么写
2015/06/03 职场文书
2015年暑期见闻
2015/07/14 职场文书
2016年教师新年寄语
2015/08/18 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python