在论坛上回答的一道算法题

/*

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值