//将1-n只猴子顺序编号 入数组中 for($i= 1
分类:热门新闻

猴王算法程序

一堆猴子排成一圈,按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 == 1State of Qatar { echo $values; exit; }

/* * 若剩余猴子数大于1 * 继续程序 */

//将第$i只猴子踢出军事(相应数组地方成分值设为0卡塔尔(قطر‎ $monkey[$i] = 0;

//打印该猴子地点 echo $i.;

/* * 获取下三只必要踢出部队的猴子编号 * 在$m值范围内遍历猴子 并设置$m的计数器 * 依次取下一猴子编号 * 若成分值为0,则该职位的猴子已被踢出军事 * 若不为0,继续获得下一猴子编号,且流速計加1 * 若得到的猴子编号大于数组个数 * 则从第0只猕猴初步遍历(数组指针归零State of Qatar步骤同上 * 直到计数器达到$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++State of Qatar { //值为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);

?

本文由威尼斯在线注册平台发布于热门新闻,转载请注明出处://将1-n只猴子顺序编号 入数组中 for($i= 1

上一篇:威尼斯登录首页国内还未有曾怎么DBM程序 下一篇:没有了
猜你喜欢
热门排行
精彩图文