• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
php 正常的猴子选大王算法

一群猴子排成一圈,按1,2,...,n依次编号。

然后从第1只开始数,数到第m只,把它踢出圈,

从它后面再开始数,再数到第m只,在把它踢出去...,

如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。

 

示意图:

php代码:

$arr = array(1,2,3,4,5,6,7,8,9,10);//示例数组
echo 'The King is :
'; print_r(King($arr,12)); function King($arr,$count){ while(count($arr) != 1){//如果数组只剩一个,就是大王,即结果 $length = count($arr);//统计本次循环数组所剩数目 if($length >= $count){//如果所要压出数组直接可以点出来 $res = array_splice($arr,$count-1,1);//压出数组 }else{ $remainder = $count%$length;//求余数,即为所要压出数组的元素 if($remainder == 0){ $remainder = $length;//如果求余结果为0,即时为本数组最后一个元素 } $res = array_splice($arr,$remainder-1,1);//压出数组 } } return $arr;//返回所求,即大王 } function killMonkey($monkeys , $m , $current = 0){ $number = count($monkeys); $num = 1; if(count($monkeys) == 1){ echo $monkeys[0]."成为猴王了"; return; } else{ while($num++ < $m){ $current++ ; $current = $current%$number; } echo $monkeys[$current]."的猴子被踢掉了
"; array_splice($monkeys , $current , 1); killMonkey($monkeys , $m , $current); } } $monkeys = array(1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 , 10); //monkeys的编号 $m = 4; //数到第几只猴子被踢出 killMonkey($monkeys , $m); function king($m, $n) { for($i = 1;$i < $m + 1;$i++) { //构建数组 $arr[] = $i; } $i = 0;//设置数组指针 while (count($arr) > 1) { //遍历数组,判断当前猴子是否为出局序号, //如果是则出局,否则放到数组最后 if (($i + 1) % $n == 0) { unset($arr[$i]); } else { array_push($arr, $arr[$i]); //本轮非出局猴子放数组尾部 unset($arr[$i]); //删除 } $i++; } return $arr; } var_dump(king(100,5));

本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/articles/8681509.html

posted on 2018-03-31 11:33  孙龙-程序员  阅读(1586)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3