本文实例讲述了PHP实现的猴王算法。分享给大家供大家参考,具体如下:
<?phpfunction getKingMokey($n, $m){
$monkey[0] = 0;
//将1-n只猴子顺序编号 入数组中 for($i= 1;
$i<= $n;
$i++) {
$monkey[$i] = $i;
}
$len = count($monkey);
//循环遍历数组元素(猴子编号) for($i= 0;
$i< $len;
$i= $i) {
$num = 0;
foreach($monkey as $key => $value) {
if($value == 0) continue;
$num++;
$values = $value;
}
//若只剩一只猴子 则输出该猴子编号(数组元素值) 并退出循环 if($num == 1) {
echo $values;
exit;
}
//将第$i只猴子踢出队伍(相应数组位置元素值设为0) $monkey[$i] = 0;
//打印该猴子位置 echo $i."";
//设置计数器 for($j= 1;
$j<= $m;
$j++) {
//猴子编号加一,遍历下一只猴子 $i++;
//若该猴子未被踢出队伍,获取下一只猴子编号 if($monkey[$i] > 0) continue;
//若元素值为0,则猴子已被踢出队伍,进而循环取下一只猴子编号 if($monkey[$i] == 0) {
//取下一只猴子编号 for($k= $i;
$k< $len;
$k++) {
//值为0,编号加1 if($monkey[$k] == 0) $i++;
//否则,编号已取得,退出 if($monkey[$k] > 0) break;
}
}
//若编号大于猴子个数,则从第0只猴子开始遍历(数组指针归零) //步骤同上 if($i == $len) $i = 0;
//同上步骤,获取下一只猴子编号 if($monkey[$i] == 0) {
for($k= $i;
$k< $len;
$k++) {
if($monkey[$k] == 0) $i++;
if($monkey[$k] > 0) break;
}
}
}
}
}
//猴子个数$n = 10;
//踢出队伍的编号间隔值$m = 3;
//调用猴王获取函数getKingMokey($n, $m);
?>
运行结果:
036927185104
用递归的算法
$monkeys = array(1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 , 10);
//monkey的编号$m = 4;
//数到第几只的那只猴子被踢出去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]."的猴子被踢掉了<br/>";
array_splice($monkeys , $current , 1);
killMonkey($monkeys , $m , $current);
}
}
killMonkey($monkeys , $m);
运行结果:
4的猴子被踢掉了
8的猴子被踢掉了
2的猴子被踢掉了
7的猴子被踢掉了
3的猴子被踢掉了
10的猴子被踢掉了
9的猴子被踢掉了
1的猴子被踢掉了
6的猴子被踢掉了
5成为猴王了
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
- php 猴子摘桃的算法
- php实现猴子选大王问题算法实例
- PHP 冒泡排序算法的实现代码
- PHP经典算法集锦【经典收藏】
- PHP的AES加密算法完整实例
- PHP面试常用算法(推荐)
- php四种基础算法代码实例
- PHP常用算法和数据结构示例(必看篇)
- php下的权限算法的实现
- php全排列递归算法代码
- php经典算法集锦