- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sina面试题猴王算法
研究了一下那个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){?$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; /*?* 遍历$monkey数组,计算数组中值不为0的元素个数(剩余猴子的个数)?* 赋值为$num,并获取值不为0的元素的元素值 */ foreach($monkey as $key = $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= $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); ?[/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 $monkeys[0].成为猴王了;?return; } else{?while($num++ $m){?$current++ ;?$current = $current%$number; } echo $monkeys[$current].的猴子被
原创力文档


文档评论(0)