PHP实现的猴王算法(猴子选大王)示例
本文实例讲述了PHP实现的猴王算法。分享给大家供大家参考,具体如下:
$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;//数到第几只的那只猴子被踢出去
functionkillMonkey($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);
}
}
killMonkey($monkeys,$m);
运行结果:
4的猴子被踢掉了
8的猴子被踢掉了
2的猴子被踢掉了
7的猴子被踢掉了
3的猴子被踢掉了
10的猴子被踢掉了
9的猴子被踢掉了
1的猴子被踢掉了
6的猴子被踢掉了
5成为猴王了
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。