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 相关文章推荐
一个ubbcode的函数,速度很快.
Oct 09 PHP
支持oicq头像的留言簿(二)
Oct 09 PHP
PHP入门
Oct 09 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
php中请求url的五种方法总结
Jul 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
一个简单实现多条件查询的例子
2006/10/09 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
Bootstrap 3 进度条的实现
2017/02/22 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Python实现SMTP邮件发送
2020/06/16 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
自荐书模板
2013/12/19 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
《失物招领》教学反思
2016/02/20 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript