+ -
当前位置:首页 → 问答吧 → 我写的猴王算法

我写的猴王算法

时间:2009-04-04

来源:互联网

[php]
<?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));
?>
[/php]

作者: houlai   发布时间: 2009-04-04

恩~~
有意思

作者: pardis_xiong   发布时间: 2009-04-04

理解都费劲!
得努力了!

作者: 齐迹   发布时间: 2009-04-04

不错

作者: kukat   发布时间: 2009-04-07

这个问题很简单的。。

作者: yangfan5   发布时间: 2009-04-08

原帖由 yangfan5 于 2009-4-8 19:07 发表
这个问题很简单的。。
嗯,我没有说有多难,只是看大家发,手痒,也发了一个

作者: houlai   发布时间: 2009-04-08

原帖由 houlai 于 2009-4-8 19:34 发表

嗯,我没有说有多难,只是看大家发,手痒,也发了一个

作者: chcn001   发布时间: 2009-04-14

<?
function king(&$king_array,&$king_out_num=1){
sort($king_array);
$king_count = count($king_array);
for ($i=0;$i<$king_count;$i++){
  if ($king_out_num==3) {
   unset($king_array[$i]);
   $king_out_num=1;
  }else {
   $king_out_num++;
  }
}
if (count($king_array)>1) {
  king($king_array,$king_out_num);
}
}
$array = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
king($array);
sort($array);
echo '最后一个是:'.$array[0];
?>

作者: ant586   发布时间: 2009-04-15