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日历[测试通过]
Mar 27 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
Thinkphp无限级分类代码
Nov 11 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 PHP
PHP实现简单日历类编写
Aug 28 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
基于empty函数的判断详解
2013/06/17 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
php 可变函数使用小结
2018/06/12 PHP
简约JS日历控件 实例代码
2013/07/12 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
python 远程统计文件代码分享
2015/05/14 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
车间调度岗位职责
2013/11/30 职场文书
年度考核自我鉴定
2014/02/02 职场文书
气象学专业个人求职信
2014/03/15 职场文书
说明书格式及范文
2014/05/07 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
Python 中的Sympy详细使用
2021/08/07 Python
mysql 获取相邻数据项
2022/05/11 MySQL