约瑟夫问题php实现,php面试题中的约瑟夫环

最近忙着做面试题,看到一道题感觉比较有兴趣,查阅相关资料后发现这是一个约瑟夫环的问题。

一群猴子围成一圈,按1,2,3,4,....n一次编号。然后从第1值开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再踢它出去...,如此不停进行下去,知道最后剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n输出最后那个大王编号?

下面内容来自网页:

解决问题的核心步骤:(程序的基本算法)

⒈建立一个具有n个链结点,无头结点的循环链表;

⒉确定第1个报数人的位置;

⒊不断地从链表中删除链结点,直到链表为空。

也许看到这里你还不明白,没关系可以看下下面的php代码模拟数据结构

/*

*@parm int $n  猴子总数

*@parm int $m 每次数到第几只

*/

function king($n,$m) {

$monkey = range(1,$n);//模拟建立一个连续数组

$i = 0;

while(count($monkey) > 1) {

$i += 1; // 开始查数

$head = array_shift($monkey); //直接一个一个出列最前面的猴子

if($i % $m != 0) {

array_push($monkey,$head); // 如果没数到m或m的倍数,则把该猴放回尾部去.

} //否则就抛弃掉了

}

return $monkey[0];

}

poj 3517 约瑟夫环

最简单的约瑟夫环,虽然感觉永远不会考约瑟夫环,但数学正好刷到这部分,跳过去的话很难过 直接粘别人分析了 约瑟夫问题: 用数学方法解的时候需要注意应当从0开始编号,因为取余会等到0解. 实质是一个递推, ...

用pl/sql游标实现约瑟夫环

什么是约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为1的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数, ...

51nod 1073 约瑟夫环

题目链接 先说一下什么是约瑟夫环,转自:传送门 关于约瑟夫环问题,无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大( ...

通过例子进阶学习C++(七)CMake项目通过模板库实现约瑟夫环

本文是通过例子学习C++的第七篇,通过这个例子可以快速入门c++相关的语法. 1.问题描述 回顾一下约瑟夫环问题:n 个人围坐在一个圆桌周围,现在从第 s 个人开始报数,数到第 m 个人,让他出局:然 ...

Java实现约瑟夫环

什么是约瑟夫环呢? 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个 ...

C++ 约瑟夫环

约瑟夫环: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周 ...

POJ-2886 Who Gets the Most Candies?---线段树+约瑟夫环

题目链接: https://cn.vjudge.net/problem/POJ-2886 题目大意: N个人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出来的人(如果他手上拿的数为正数,从他左边数 ...

"递归"实现"约瑟夫环","汉诺塔"

一:约瑟夫环问题是由古罗马的史学家约瑟夫提出的,问题描述为:编号为1,2,-.n的n个人按顺时针方向围坐在一张圆桌周围,每个人持有一个密码(正整数),一开始任选一个正整数作为报数上限值m,从第一个人开 ...

hdu 3089 约瑟夫环

原来并不知道约瑟夫环还可以递推直接解orz 约瑟夫问题的递推公式: 设f[n]表示一共n个人,数到k出局,这样最后的winner (n个人从0开始标号,即0--n-1) f[n]=(f[n-1]+k) ...

随机推荐

Android——WebView

WebView用途 通过Intent调用系统浏览器: 引言: Uri uri = Uri.parse(url);//url为你要链接的地址 Intent intent = new Intent(Int ...

linux之svn

sudo apt-get install subversion 实践出真理

python中的内置函数getattr()

在python的官方文档中:getattr()的解释如下: getattr(object, name[, default]) Return the value of the named attribu ...

Hadoop实战2:MapReduce编程-WordCount实例-streaming-python环境

这是搭建hadoop环境后的第一个MapReduce程序: 基于hadoop streaming的python的脚本: 1 map.py文件,把文本的内容划分成单词: #!/usr/bin/pytho ...

JAVA-反射学习

原文:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 个人总结: 1. 反射是什么:由字节码文件(.class)获取 ...

Split()特殊字符

关于点的问题是用string.split("[.]") 解决. 关于竖线的问题用 string.split("\\|")解决. 关于星号的问题用 string. ...

angular自定义分页组件(实用)

功能描述:分页,点击按钮或者下一页获取分页接口,同时active到对应页码. html模块:

JS构造函数、原型对象、隐含参数this

This 解析器再调用函数每次都会向函数内部传递一个隐含的参数this,this指向的是一个对象(函数执行的上下文对象) 1.以函数形式调用时,this永远是window. 2.以方法形式调用时,th ...

codeforces484A

Bits CodeForces - 484A Let's denote as  the number of bits set ('1' bits) in the binary representati ...

springboot项目的重定向和转发

下面是idea软件创建的项目目录,这里总结了一下转发与重定向的问题,详解如下. 首先解释一下每个文件夹的作用,如果你是用的是idea创建的springboot项目,会在项目创建的一开始resource ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值