您好,登錄后才能下訂單哦!
這篇文章主要講解了“PHP怎么解決約瑟夫環(huán)問題”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“PHP怎么解決約瑟夫環(huán)問題”吧!
約瑟夫環(huán)問題(猴子選大王)PHP版
約瑟夫斯問題問題有時(shí)候也被描述成猴子選大王問題,題目如下。(最后會(huì)貼上約瑟夫問題的來歷)
一群猴子排成一圈,按1,2,…,n依次編號(hào)。
然后從第1只開始數(shù),數(shù)到第m只,把它踢出圈,從它后面再開始數(shù),再數(shù)到第m只,在把它踢出去…,如此不停的進(jìn)行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。
要求編程模擬此過程,輸入m、n, 輸出最后那個(gè)大王的編號(hào)。
用程序模擬該過程,代碼如下:
function monkeyKing($n, $m) { $arr = range(1, $n); //構(gòu)造一個(gè)數(shù)組 $i = 1; //從第一個(gè)開始循環(huán) while (count($arr) > 1) { //如果總數(shù)大于1 if ($i % $m != 0) { $arr[] = $arr[$i - 1]; //不被踢出則壓入數(shù)組尾部 } unset($arr[$i - 1]); //壓入數(shù)組然后刪除 $i++; //繼續(xù)循環(huán) } return $arr[$i - 1]; //直至最后剩下一個(gè)為大王 } print_r(monkeyKing(5, 3)); //第4只為大王
下面是模擬的過程,對(duì)于不剔除的猴子,不斷的加入數(shù)組尾部:
$n = 5 $m = 3 $arr = [1, 2, 3, 4, 5] $i $arr ---+------------------------ 1 x 2 3 4 5 1 2 x x 3 4 5 1 2 >3 x x x 4 5 1 2 4 x x x x 5 1 2 4 5 x x x x x 1 2 4 5 >6 x x x x x x 2 4 5 7 x x x x x x x 4 5 2 8 x x x x x x x x 5 2 4 >9 x x x x x x x x x 2 4 10 x x x x x x x x x x 4 2 11 x x x x x x x x x x x 2 4 >12 x x x x x x x x x x x x 4
約瑟夫問題來歷:
這個(gè)問題是以弗拉維奧·約瑟夫命名的,它是1世紀(jì)的一名猶太歷史學(xué)家。他在自己的日記中寫道,他和他的40個(gè)戰(zhàn)友被羅馬軍隊(duì)包圍在洞中。他們討論是自殺還是被俘,最終決定自殺,并以抽簽的方式?jīng)Q定誰殺掉誰。約瑟夫斯和另外一個(gè)人是最后兩個(gè)留下的人。約瑟夫斯說服了那個(gè)人,他們將向羅馬軍隊(duì)投降,不再自殺。約瑟夫斯把他的存活歸因于運(yùn)氣或天意,他不知道是哪一個(gè)。
感謝各位的閱讀,以上就是“PHP怎么解決約瑟夫環(huán)問題”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)PHP怎么解決約瑟夫環(huán)問題這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。