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 什么是PEAR?
Mar 19 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
Laravel框架表单验证操作实例分析
Sep 30 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
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
扩展String功能方法
2006/09/22 Javascript
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
Using the TextRange Object
2006/10/14 Javascript
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
python 读取二进制 显示图片案例
2020/04/24 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
介绍Java的内部类
2012/10/27 面试题
Linux文件操作命令都有哪些
2015/02/27 面试题
应用化学专业职业生涯规划书
2014/01/22 职场文书
增员口号大全
2014/06/18 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
布达拉宫的导游词
2015/02/02 职场文书
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android