PHP實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的方法分析
本文實(shí)例講述了PHP實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的方法。分享給大家供大家參考,具體如下:
一、概述
先來(lái)看看網(wǎng)上比較常見(jiàn)的約瑟夫環(huán)問(wèn)題描述:約瑟夫環(huán)(約瑟夫問(wèn)題)是一個(gè)數(shù)學(xué)的應(yīng)用問(wèn)題:已知n個(gè)人(以編號(hào)1,2,3...n分別表示)圍坐在一張圓桌周?chē)?。從編?hào)為k的人開(kāi)始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開(kāi)始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重復(fù)下去,直到圓桌周?chē)娜巳砍隽?。通常解決這類(lèi)問(wèn)題時(shí)我們把編號(hào)從0~n-1,最后結(jié)果+1即為原問(wèn)題的解。
二、實(shí)現(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);
運(yùn)行結(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);
運(yùn)行結(jié)果:
7 11 3 8 1 6 2 10 9 12 5 4
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php解決約瑟夫環(huán)示例
- 約瑟夫環(huán)問(wèn)題的PHP實(shí)現(xiàn) 使用PHP數(shù)組內(nèi)部指針操作函數(shù)
- PHP使用棧解決約瑟夫環(huán)問(wèn)題算法示例
- PHP基于遞歸實(shí)現(xiàn)的約瑟夫環(huán)算法示例
- PHP實(shí)現(xiàn)的基于單向鏈表解決約瑟夫環(huán)問(wèn)題示例
- php基于環(huán)形鏈表解決約瑟夫環(huán)問(wèn)題示例
- php實(shí)現(xiàn)約瑟夫問(wèn)題的方法小結(jié)
- php約瑟夫問(wèn)題解決關(guān)于處死犯人的算法
- PHP基于關(guān)聯(lián)數(shù)組20行代碼搞定約瑟夫問(wèn)題示例
- php使用環(huán)形鏈表解決約瑟夫問(wèn)題完整示例
- php解決約瑟夫環(huán)算法實(shí)例分析
相關(guān)文章
php在apache環(huán)境下實(shí)現(xiàn)gzip配置方法
這篇文章主要介紹了php在apache環(huán)境下實(shí)現(xiàn)gzip配置方法,較為詳細(xì)的分析了相關(guān)配置文件的修改技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04PHP頁(yè)面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法詳解
這篇文章主要介紹了PHP頁(yè)面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法,結(jié)合實(shí)例形式分析了PHP頁(yè)面靜態(tài)化——純靜態(tài)與偽靜態(tài)相關(guān)原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-06-06php實(shí)現(xiàn)MD5加密16位(不要默認(rèn)的32位)
今天做了個(gè)php鏈接mssql數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中的表中字段使用MD5十六加密的。但是php中的MD5默認(rèn)是32位,導(dǎo)致登錄程序沒(méi)辦法使用md5加密跟表中字段匹配,在網(wǎng)上一搜也有不少人有這方面的困惑,后來(lái)找到一個(gè)解決辦法,是正確的,就記錄下來(lái)2013-08-08PHP正則替換函數(shù)preg_replace和preg_replace_callback使用總結(jié)
這篇文章主要介紹了PHP正則替換函數(shù)preg_replace和preg_replace_callback使用總結(jié),本文是在寫(xiě)一個(gè)模板引擎遇到一個(gè)特殊需求時(shí)總結(jié)而來(lái),需要的朋友可以參考下2014-09-09PHP實(shí)現(xiàn)在數(shù)據(jù)庫(kù)百萬(wàn)條數(shù)據(jù)中隨機(jī)獲取20條記錄的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)在數(shù)據(jù)庫(kù)百萬(wàn)條數(shù)據(jù)中隨機(jī)獲取20條記錄的方法,涉及php簡(jiǎn)單數(shù)據(jù)庫(kù)查詢(xún)與隨機(jī)數(shù)操作相關(guān)技巧,需要的朋友可以參考下2017-04-04