题目

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。

该题目本质是约瑟夫环的考察,算法还有一个起源故事,据说著名犹太历史学家约瑟夫在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39 个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41 个人排成一个圆圈,由第1个人开始报数,每报数到第 3 人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。由于约瑟夫和他的朋友并不想自杀,但又无法反抗,只能同意了这个方式,但他把自己和朋友分别安排在了 16 和 31 这两个位置,最后顺利活到了最后。

以上故事再次验证了,学好数理化,走遍天下都不怕!

感受知识的魅力吧骚年

代码实例

/**

* @param $n int 元素总个数

* @param $m int 指定序数

* @return mixed

*/

function mk($n, $m)

{

//根据总数生成数组

$range = range(1, $n);

$i = 1;

while (count($range) > 1) {

//如果不是当前元素,压入数组末尾并删除当前下标

if ($i % $m != 0) array_push($range, $range[$i - 1]);

unset($range[$i - 1]);

$i++;

}

return $range[$i - 1];

}

用以上函数来验证故事,修改一下函数体逻辑即可

/**

* @param $n int 元素总个数

* @param $m int 指定序数

* @return mixed

*/

function mk($n, $m)

{

//根据总数生成数组

$range = range(1, $n);

$i = 1;

//验证最后剩下的两个元素

while (count($range) > 2) {

//如果不是当前元素,压入数组末尾并删除当前下标

if ($i % $m != 0) array_push($range, $range[$i - 1]);

unset($range[$i - 1]);

$i++;

}

return $range;

}

$survivor = mk(41, 3);

print_r($survivor); //16,31

php 猴子选大王,PHP 算法题猴子选大王相关推荐

  1. C++经典算法题-猴子吃桃问题

    1. 题目 题目:一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个. 2. 分析 3. 代码示例 /* 猴子吃桃问题 */main(){i ...

  2. c语言中猴子拿香蕉的代码题,猴子分香蕉(2018年第九届蓝桥杯省赛第二题)

    ```java /** * 标题:猴子分香蕉 5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份 ...

  3. java猴子分桃_算法——猴子分桃

    想做些有关"算法"的练习题,在网上无意间看到了一道很经典的算法题--猴子分桃,于是百度了一下,才发现这道题的相关文档很多很多,但最多的也就是使用C++或者Java来解决这道题,而自 ...

  4. php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...

    琪琪词资源网-教程方法;php实现猴子选大王问题算法实例电脑技巧,以下是给大家带来的教程方法;php实现猴子选大王问题算法实例,大家可以了解一下哦! 下面为你介绍php实现猴子选大王问题算法实例. 本 ...

  5. python猴子选大王讲解_python 【猴子选大王】算法示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 今天来实现一个约瑟夫环算法,下面是一道新浪的面试题: m只猴子围坐成一个圈,按顺时针方向从1到m编 ...

  6. 经典算法题每日演练——第三题 猴子吃桃

    猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多 ...

  7. php面试 猴子大王,php猴子选大王问题解决方法,猴子大王_PHP教程

    php猴子选大王问题解决方法,猴子大王 本文实例讲述了php猴子选大王问题解决方法.分享给大家供大家参考.具体分析如下: 问题描述: 一群猴子排成一圈,按1,2,...,n依次编号.然后从第1只开始数 ...

  8. 猴子吃桃的逆推c语言算法,经典算法题每日演练 猴子吃桃

    猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多 ...

  9. 猴子选大王php,php实现猴子选大王

    php实现猴子选大王/** * n只猴子围坐成一个圈,按顺时针方向从1到n编号. * 然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局, * 再从刚出局猴子的下一个位置重新开始报数, * ...

最新文章

  1. 在Windows 8下成功安装.Net3.5的方法
  2. Linux设备驱动模型2——总线式设备驱动组织方式
  3. 《笑傲网湖》第二回 VLAN
  4. 微软神操作!Web 版 VS Code 来了!
  5. android wifi智能车,STM32智能WiFi视频小车全套资料(带安卓app与stm32源码等)
  6. .Net程序猿玩转Android开发---(11)页面跳转
  7. Generic Netlink内核实现分析(二):通信
  8. mysql 编译安装详解_MySQL编译安装详解
  9. 算法设计与分析(第2版)屈婉玲 刘田 张立昂 王捍贫编著 第三章课后习题答案
  10. 老Java程序员花一天时间写了个飞机大战,很舒服!
  11. jQuery API中文手册详解
  12. SpringBoot-Learning-作者:翟永超
  13. pg8168改mac命令_使用PG8168修改8111b网卡MAC地址
  14. [原创] 阿里巴巴平台型产品经理 实习生面试经历
  15. usnews 计算机专业排名,2020USNEWS计算机科学专业排名
  16. 第六章 使用 matplotlib 绘制热力图
  17. u盘提示需要格式化?怎么实现数据恢复?
  18. Reporting verbs
  19. oracle巡检表,ORACLE日常巡检内容
  20. rails 杂记 - erb 中的 link_to 的 ActiveRecord 与 render 中的 partial

热门文章

  1. 前端页面请求转发(forward)与重定向(redirect)
  2. 阿里云数字化转型方案再升级,移动研发平台EMAS助力海底捞超级App“云上捞”... 1
  3. html渐变设置颜色比例,css3 渐变两个颜色 各占百分之五十怎么设置
  4. P4158[SCOI2009]粉刷匠
  5. iMouse - 快速切换鼠标左右键
  6. linux 查看文件句柄,查看linux下进程打开的文件句柄数并清理
  7. pytest框架之fixture详细使用
  8. Flutter 开发踩坑记录
  9. @我的前任是个极品 微博分析
  10. python chmod_Python os.chmod用法及代码示例