【原创】猴子选大王PHP

题目要求:n只猴子围成一圈,然后从其中某只猴子开始计数,数到第m只的时候把它离场,循环这个过程到最后剩下一只猴子,它就是大王了。

以为下是靠自己理解编写的php源码,算法肯定不是最优,便于自己理解:

echo getMonkeyKing(4,10);

function getMonkeyKing($m,$n){
	$arr = range(1,$n);
	print_r($arr);
	$s_m = $m;//记录开始选猴步数
	$n=count($arr);
	//$j=0;
	while($n>1){//最后剩下一只猴子
		echo "***".$arr[$m-1];//离场的猴子
		for($i=$m;$i<$n;$i++){
			$arr[$i-1]=$arr[$i];//选到猴子后所有数组向前移动一步
		}
		unset($arr[$n-1]);//删除最后空余的数组
		$n=count($arr);//重新计算剩下的猴子总数
		$m=$m+$s_m-1;//重新计算选猴的位置
		if($m>$n){
			$m=$m%$n;////选猴位置大于总数时需从头选,用求余计算位置
		}
		if($m<=0){//重新计算位置出现负数为倒数的情况
			$m=$m+$n;
		}
		//$j++;
		//print_r($arr);
		//if($j==20) exit;
	}
	return $arr[0];
}
此条目发表在服务器分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表回复