首頁  >  文章  >  後端開發  >  PHP實作約瑟夫環問題的方法詳解

PHP實作約瑟夫環問題的方法詳解

jacklove
jacklove原創
2018-07-06 17:53:171979瀏覽

這篇文章主要介紹了PHP實現約瑟夫環問題的方法,結合實例形式分析了php使用循環與遞歸實現約瑟夫環的相關操作技巧,需要的朋友可以參考下

本文實例講述了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

#您可能感興趣的文章:

# Laravel5.5利用Passport實作Auth認證的方法講解

PHP中你可能忽略的效能最佳化利器:生成器的相關內容

#Laravel框架中composer自動載入的實作詳解

以上是PHP實作約瑟夫環問題的方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn