php实现约瑟夫问题的方法小结

 这篇文章主要介绍了php实现约瑟夫问题的方法,实例总结了两种常见的实现约瑟夫问题的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

 
 

本文实例总结了php实现约瑟夫问题的方法。分享给大家供大家参考。具体分析如下:

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

解析:

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

方法一:

?

1
2
3
4
5
6
7
8
9
10
11

<?php
function getLeader($n,$m) {
$res=0;
for($i=2; $i<=$n; $i++) {
$res=($res+$m)%$i;
}
return $res+1;
}
$leader = getLeader(13,34);
echo $leader;
?>

方法二:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<?php
//定义函数
function getKing($monkeys , $m , $current = 0){
$number = count($monkeys);
$num = 1;
if(count($monkeys) == 1){
echo '<font color="red">编号为'.$monkeys[0].'的猴子成为猴王了!</font>';
return;
}else{
while($num++ < $m){
$current++ ;
$current = $current%$number;
}
echo "编号为".$monkeys[$current]."的猴子被踢掉了...<br/>";
array_splice($monkeys , $current , 1);
getKing($monkeys , $m , $current);
}
}
$n=13; //总共猴子数目
$m = 34; //数到第几只的那只猴子被踢出去
$monkeys = range(1,$n); //将猴子编号放入数组中
getKing($monkeys , $m); //调用函数
?>

希望本文所述对大家的php程序设计有所帮助。

时间: 2024-10-27 13:15:49

php实现约瑟夫问题的方法小结的相关文章

Android手机内存中文件的读写方法小结

  Android手机内存中文件的读写方法小结         这篇文章主要介绍了Android手机内存中文件的读写方法,实例总结了Android针对文件读写操作的相关技巧,非常具有实用价值,需要的朋友可以参考: 如何对手机内存中的文件数据进行读写呢? Context提供了领个方法来打开该应用程序的数据文件夹中的文件I/O流,具体如下: ? 1 FileInputStream openFileInput(String name) 打开应用程序的数据文件夹下的name文件对应的数据流 ? 1 Fi

在Word 2007中打开多文档方法小结

在Word 2007中打开多文档方法小结 大家知道,如果想打开多个Word2007文档,可以将所有需要打开的文档选择上,然后单击鼠标右键,选择"打开",这样文件就被一一打开了,但是打开多个窗口,不但占用系统资源,而且也不利于操作编辑.其实,按照笔者的步骤去做,上述问题将会迎刃而解. 首先,打开一个空白文档,然后将需要打开的文档全部选中,单击"复制",在Word2007空白文档中任意位置单击"粘贴",这样之后,每个文档都会被 粘贴到这个Word20

C#播放背景音乐的方法小结

  C#播放背景音乐的方法小结           这篇文章主要介绍了C#播放背景音乐的方法,实例总结了C#播放背景音乐的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#播放背景音乐的方法.分享给大家供大家参考.具体分析如下: 最经在写winform程序,其中有用到播放背景音乐 特此收集了一些网上的教程: 1.调用非托管的dll ? 1 2 3 4 5 6 7 8 9 10 11 12 using System.Runtime.InteropServices; //DllIm

PHP连接MySQL的2种方法小结以及防止乱码

 本篇文章主要是对PHP连接MySQL的2种方法小结以及防止乱码问题进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 PHP的MySQL配置   报错信息:Class 'mysqli' not found in   Answer: 1.在conf/php.ini中,在vim用"/php_mysql"搜索到extension=php_mysql.dll,去掉前面的";",   同时在下面增加extension=php_mysqli.dll;   注意后面

用JS动态设置CSS样式常见方法小结(推荐)_javascript技巧

用JS来动态设置CSS样式,常见的有以下几种 1. 直接设置style的属性 某些情况用这个设置 !important值无效 如果属性有'-'号,就写成驼峰的形式(如textAlign) 如果想保留 - 号,就中括号的形式 element.style['text-align'] = '100px'; element.style.height = '100px'; 2. 直接设置属性(只能用于某些属性,相关样式会自动识别) element.setAttribute('height', 100);

JavaScript sort数组排序方法和自我实现排序方法小结_javascript技巧

 前言 针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个需求的. 当然,数组排序,是有现成的方法的.就是sort()方法. 我们先开看下这个. 标准答案,sort方法 var arr = [45,98,67,57,85,6,58,83,48,18]; console.log('原数组'); console.log(arr); console.log('sort方法从小到大排序'); console.log(arr.sort(function(a,b){return a-b

iOS UIView常见属性方法小结_IOS

下面通过实例代码给大家详细介绍了iOS UIView常见属性方法,具体代码如下所示: UIView : UIResponder /** 通过一个frame来初始化一个UI控件 */ - (id)initWithFrame:(CGRect)frame; // YES:能够跟用户进行交互 @property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled; // default is YES // 控件的一

jquery中的常见问题及快速解决方法小结_jquery

1 在开发开放聊天室的过程中,遇到使用ajax提交表单插入数据库时会插入两条数据的情况 解决办法,在ajax函数返回后,return false. $("#btn").click(function(){ $.ajax({ do something }); return false; }) 2 去除选中元素的某一个属性使用removeattr 3 javascript中与时间相关的函数有setInterval("function",millisec[,"la

Java中Spring获取bean方法小结_java

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢? Bean工厂(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高级IoC的配置机制.BeanFactory使管理不同类型的Java对象成为可能,应用上下文(com.springframework.context.ApplicationContext)建立在BeanFactory基础之上,提供