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操作Access类(PHP+ODBC+Access)
Jan 02 PHP
PHP无限分类的类
Jan 02 PHP
php 页面执行时间计算代码
Dec 04 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
php base64 编码与解码实例代码
Mar 21 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 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 和 HTML
2006/10/09 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python守护进程用法实例分析
2015/06/04 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
python利用platform模块获取系统信息
2020/10/09 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
致百米运动员广播稿
2014/01/29 职场文书
大学军训感言300字
2014/03/09 职场文书
学术会议主持词
2014/03/17 职场文书
诚信承诺书范文
2014/03/27 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
大专生找工作自荐书
2014/06/10 职场文书
云台山导游词
2015/02/03 职场文书
行政处罚决定书
2015/06/24 职场文书
Spring 使用注解开发
2022/05/20 Java/Android