本文實例講述了PHP實現約瑟夫環問題的方法。分享給大家供大家參考,具體如下:
一、概述
先來看看網上比較常見的約瑟夫環問題描述:約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0~n-1,最后結果+1即為原問題的解。
二、實現代碼
1. 循環
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);
運行結果:
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);
運行結果:
7 11 3 8 1 6 2 10 9 12 5 4
更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP數據結構與算法教程》、《php程序設計算法總結》、《php字符串(string)用法總結》、《PHP數組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結》及《PHP數學運算技巧總結》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:- php解決約瑟夫環示例
- 約瑟夫環問題的PHP實現 使用PHP數組內部指針操作函數
- PHP使用棧解決約瑟夫環問題算法示例
- PHP基于遞歸實現的約瑟夫環算法示例
- PHP實現的基于單向鏈表解決約瑟夫環問題示例
- php基于環形鏈表解決約瑟夫環問題示例
- php實現約瑟夫問題的方法小結
- php約瑟夫問題解決關于處死犯人的算法
- PHP基于關聯數組20行代碼搞定約瑟夫問題示例
- php使用環形鏈表解決約瑟夫問題完整示例
- php解決約瑟夫環算法實例分析