用php实现约瑟夫环问题,求指导

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

思考:按正常思路来讲,应该是以一个猴为起点(定位),开始日后数,又由于是个圈,从最后一个又转到第一个,能够认为是在取余。那么我就按照我数猴的思惟模式开始写程序了。主要利用的数组。c++

<?php
function getking($n,$m){
	$array=range(1,$n);
	$now=0;//初始化$now,为定位标志,也就是从它开始数
	$nn=$n;//不破坏初始量
	while($nn>1){
		$now=($now+$m)%$nn;//计算该第几个猴子出局了,由于是圈,取余就够了
		if(!$now){$now=$nn;}//若是正好整除那么这个猴子是最后一个(不是第0个)
		array_splice($array,$now-1,1);//去掉这个猴子
		$nn--;$now--;//总数减小一个,标志前移一个
	}
	echo $array[0];
}
getking(100,17);

ps. array_splice是我无心间发现的函数,由于unset一个数组元素后不会重建键值,这个函数能够重建的。若是不是这样我就从新循环定义一个新数组了。编程

我以为这么写很是简单,可是不知道为何,关于这个题的解法中,没有这么写的呢?基本都是c++的思路,动游标来写,是我写的过低级了么?数组

相关文章
相关标签/搜索