/*
PHP选猴子大王问题
山上有M只猴子要选大王,选举办法如下:所有猴子从1到M进行编号并围坐一圈,从第一号开始按顺序1,2,...M继续报数,
凡是报N号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。语言不限。
+———————————————+
| Author: 杨宇 <yangyu@sina.cn> |
+———————————————+
*/
$M = 10;
$N = 3;
for($i = 1; $i <= $M; $i++){
$array[$i]['num'] = $i;
$array[$i]['nextnum'] = $i==$M ? 1 : $i+1;
}
$count = 0;
$h = $M;
printf("依次退出的猴子: /n");
while($count < $M-1){
$i = 0;
while($i != $N){
$h = $array[$h]['nextnum'];
if($array[$h]['num']) $i++;
}
printf("%4d",$array[$h]['num']);
$array[$h]['num'] = 0;
$count++;
}
$result = array_values(array_filter($array,create_function('$a', 'return $a["num"];')));
printf("/n大王是:%3d/n",$result[0]['num']);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangyu112654374/archive/2009/12/29/5098337.aspx