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 相关文章推荐
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
PHP遍历数组的几种方法
Mar 22 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
php实现对象克隆的方法
Jun 20 PHP
php+MySQL实现登录时验证登录名和密码是否正确
May 10 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
PHP读取大文件的几种方法介绍
Oct 27 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 PHP
PHP设计模式之命令模式示例详解
Dec 20 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
详解Django中Request对象的相关用法
2015/07/17 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
迎新生标语大全
2014/10/06 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
如何写好竞聘报告
2019/04/03 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书