sina面试题猴王算法.docx_第1页
sina面试题猴王算法.docx_第2页
sina面试题猴王算法.docx_第3页
sina面试题猴王算法.docx_第4页
sina面试题猴王算法.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

研究了一下那个sina面试题,猴王算法,自己写了一个,感觉有些冗长,欢迎拍砖php?php/* filename: kingmonkey.php* author: luochuan wang* date: April 2nd, 2009* descript: an arithmetic to a program* program: 一群猴子排成一圈,按1,2,.,n依次编号。 然后从第1只开始数,数到第m只,把它踢出圈, 从它后面再开始数,再数到第m只,在把它踢出去., 如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。 要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。*/function getKingMokey($n, $m) $monkey0 = 0; /将1-n只猴子顺序编号 入数组中 for($i= 1; $i= $n; $i+) $monkey$i = $i; $len = count($monkey); /循环遍历数组元素(猴子编号) for($i= 0; $i $value) if($value = 0) continue; $num+; $values = $value; /若只剩一只猴子 则输出该猴子编号(数组元素值) 并退出循环 if($num = 1) echo $values; exit; /* * 若剩余猴子数大于1($num 1) * 继续程序 */ /将第$i只猴子踢出队伍(相应数组位置元素值设为0) $monkey$i = 0; /打印该猴子位置 echo $i.; /* * 获取下一只需要踢出队伍的猴子编号 * 在$m值范围内遍历猴子 并设置$m的计数器 * 依次取下一猴子编号 * 若元素值为0,则该位置的猴子已被踢出队伍 * 若不为0,继续获取下一猴子编号,且计数器加1 * 若取得的猴子编号大于数组个数 * 则从第0只猴子开始遍历(数组指针归零) 步骤同上 * 直到计数器到达$m值 * 最后获取的$i值即为下一只需要踢出队伍的猴子编号 */ /设置计数器 for($j= 1; $j 0) continue; /若元素值为0,则猴子已被踢出队伍,进而循环取下一只猴子编号 if($monkey$i = 0) /取下一只猴子编号 for($k= $i; $k 0) break; /若编号大于猴子个数,则从第0只猴子开始遍历(数组指针归零) 步骤同上 if($i = $len) $i = 0; /同上步骤,获取下一只猴子编号 if($monkey$i = 0) for($k= $i; $k 0) break; /猴子个数 $n = 10; /踢出队伍的编号间隔值 $m = 3; /调用猴王获取函数 getKingMokey($n, $m); ?/php看看用递归的算法$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 $monkeys0.成为猴王了; return; else while($num+ $m) $current+ ; $current = $current%$number; echo $monkeys$current.的猴子被踢掉了; array_splice($monkeys , $current , 1); killMonkey($monkeys , $m , $current); killMonkey($monkeys , $m);/* 线性表应用(选首领问题)* para

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论