<?php
/*
* filename: kingmonkey.php
* author: jiangang li
* date: April 3th, 2009
* descript: an arithmetic to a program
* program:
一群猴子排成一圈,按1,2,…,n依次编号。
然后从第1只开始数,数到第m只,把它踢出圈,
从它后面再开始数, 再数到第m只,在把它踢出去…,
如此不停的进行下去, 直到最后只剩下一只猴子为止,那只猴子就叫做大王。
要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
*/
set_time_limit(1);
function KingMokey($n, $m)
{
//将1-n只猴子顺序编号 入数组中
$monkey = range(1,$n);
//循环遍历数组元素(猴子编号)
$i=1;
while(1){
list($key,$value)=each($monkey);
if (!$value){
reset($monkey);
list($key,$value)=each($monkey);
}
if(count($monkey)==1){
break;
}
if ($i%$m == 0){
unset($monkey[$key]);
}
$i = $i % $m + 1;
}
return $value;
}
//猴子个数
$n = 10;
//踢出队伍的编号间隔值
$m = 3;
//调用猴王获取函数
print_r(KingMokey($n, $m));
?>
发表回复