电脑安全

您当前的位置:主页 > 电脑安全 >

猴王算法程序-网络编程

来源:[db:来源]标题:   猴子    编辑:电脑技术全能网 时间:2019-09-19 12:33

原标题:猴王算法程序-网络编程
   猴王算法顺序 一群山公排成一圈,按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);?>