本文實例講述了PHP實現(xiàn)約瑟夫環(huán)問題的方法。分享給大家供大家參考,具體如下:
一、概述
先來看看網(wǎng)上比較常見的約瑟夫環(huán)問題描述:約瑟夫環(huán)(約瑟夫問題)是一個數(shù)學(xué)的應(yīng)用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數(shù),數(shù)到m的那個人出列;他的下一個人又從1開始報數(shù),數(shù)到m的那個人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0~n-1,最后結(jié)果+1即為原問題的解。
二、實現(xiàn)代碼
1. 循環(huán)
function circle($arr,$idx,$k){ for($i=0;$i$idx;$i++){ $tmp = array_shift($arr); array_push($arr,$tmp); } $j = 1; while(count($arr) > 0){ $tmp = array_shift($arr); if($j++%$k == 0){ echo $tmp."\n"; }else{ array_push($arr,$tmp); } } } $arr = array(1,2,3,4,5,6,7,8,9,10,11,12); $idx = 3; $k = 4; circle($arr,$idx,$k);
運行結(jié)果:
7 11 3 8 1 6 2 10 9 12 5 4
2. 遞歸
function circle($arr,$idx,$k){ $len = count($arr); $i = 1; if($len == 1){ echo $arr[0]."\n"; return ; } else { while($i++ $k){ $idx++; $idx = $idx%$len; } echo $arr[$idx]."\n"; array_splice($arr,$idx,1); circle($arr,$idx,$k); } } $arr = [1,2,3,4,5,6,7,8,9,10,11,12]; $idx = 3; $k = 4; circle($arr,$idx,$k);
運行結(jié)果:
7 11 3 8 1 6 2 10 9 12 5 4
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運算技巧總結(jié)》
希望本文所述對大家PHP程序設(shè)計有所幫助。
標(biāo)簽:南寧 十堰 海南 樂山 佛山 六安 定西 迪慶
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP實現(xiàn)約瑟夫環(huán)問題的方法分析》,本文關(guān)鍵詞 PHP,實現(xiàn),約瑟夫,環(huán)問,題的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。