PHP解决约瑟夫环问题
一、总结
二、PHP解决约瑟夫环问题
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1] 结果+1即为原问题的解。
1 //PHP解决约瑟夫环问题 2 //方法一 3 function joseph_ring($n,$m){ 4 $arr = range(1,$n); 5 $i = 0; 6 while(count($arr)>1){ 7 $i=$i+1; 8 $head = array_shift($arr); 9 if($i%$m != 0){ //如果不是则重新压入数组 10 array_push($arr,$head); 11 } 12 } 13 return $arr[0]; 14 } 15 //方法二 16 function joseph_ring2($n,$m){ 17 $r = 0; 18 for($i=2;$i<=$n;$i++){ 19 $r = ($r+$m)%$i; 20 } 21 return $r + 1; 22 } 23 echo "<br/>".joseph_ring(60,5)."<br/>"; 24 echo "<br/>".joseph_ring2(60,5)."<br/>";
方法一直接模拟