php 猴子选大王,PHP 算法题猴子选大王
题目
一群猴子排成一圈,按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 算法题猴子选大王相关推荐
- C++经典算法题-猴子吃桃问题
1. 题目 题目:一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个. 2. 分析 3. 代码示例 /* 猴子吃桃问题 */main(){i ...
- c语言中猴子拿香蕉的代码题,猴子分香蕉(2018年第九届蓝桥杯省赛第二题)
```java /** * 标题:猴子分香蕉 5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份 ...
- java猴子分桃_算法——猴子分桃
想做些有关"算法"的练习题,在网上无意间看到了一道很经典的算法题--猴子分桃,于是百度了一下,才发现这道题的相关文档很多很多,但最多的也就是使用C++或者Java来解决这道题,而自 ...
- php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...
琪琪词资源网-教程方法;php实现猴子选大王问题算法实例电脑技巧,以下是给大家带来的教程方法;php实现猴子选大王问题算法实例,大家可以了解一下哦! 下面为你介绍php实现猴子选大王问题算法实例. 本 ...
- python猴子选大王讲解_python 【猴子选大王】算法示例
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 今天来实现一个约瑟夫环算法,下面是一道新浪的面试题: m只猴子围坐成一个圈,按顺时针方向从1到m编 ...
- 经典算法题每日演练——第三题 猴子吃桃
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多 ...
- php面试 猴子大王,php猴子选大王问题解决方法,猴子大王_PHP教程
php猴子选大王问题解决方法,猴子大王 本文实例讲述了php猴子选大王问题解决方法.分享给大家供大家参考.具体分析如下: 问题描述: 一群猴子排成一圈,按1,2,...,n依次编号.然后从第1只开始数 ...
- 猴子吃桃的逆推c语言算法,经典算法题每日演练 猴子吃桃
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多 ...
- 猴子选大王php,php实现猴子选大王
php实现猴子选大王/** * n只猴子围坐成一个圈,按顺时针方向从1到n编号. * 然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局, * 再从刚出局猴子的下一个位置重新开始报数, * ...
最新文章
- 在Windows 8下成功安装.Net3.5的方法
- Linux设备驱动模型2——总线式设备驱动组织方式
- 《笑傲网湖》第二回 VLAN
- 微软神操作!Web 版 VS Code 来了!
- android wifi智能车,STM32智能WiFi视频小车全套资料(带安卓app与stm32源码等)
- .Net程序猿玩转Android开发---(11)页面跳转
- Generic Netlink内核实现分析(二):通信
- mysql 编译安装详解_MySQL编译安装详解
- 算法设计与分析(第2版)屈婉玲 刘田 张立昂 王捍贫编著 第三章课后习题答案
- 老Java程序员花一天时间写了个飞机大战,很舒服!
- jQuery API中文手册详解
- SpringBoot-Learning-作者:翟永超
- pg8168改mac命令_使用PG8168修改8111b网卡MAC地址
- [原创] 阿里巴巴平台型产品经理 实习生面试经历
- usnews 计算机专业排名,2020USNEWS计算机科学专业排名
- 第六章 使用 matplotlib 绘制热力图
- u盘提示需要格式化?怎么实现数据恢复?
- Reporting verbs
- oracle巡检表,ORACLE日常巡检内容
- rails 杂记 - erb 中的 link_to 的 ActiveRecord 与 render 中的 partial
热门文章
- 前端页面请求转发(forward)与重定向(redirect)
- 阿里云数字化转型方案再升级,移动研发平台EMAS助力海底捞超级App“云上捞”... 1
- html渐变设置颜色比例,css3 渐变两个颜色 各占百分之五十怎么设置
- P4158[SCOI2009]粉刷匠
- iMouse - 快速切换鼠标左右键
- linux 查看文件句柄,查看linux下进程打开的文件句柄数并清理
- pytest框架之fixture详细使用
- Flutter 开发踩坑记录
- @我的前任是个极品 微博分析
- python chmod_Python os.chmod用法及代码示例