1. 程式人生 > >約瑟夫環 猴子選大王

約瑟夫環 猴子選大王

 

<?
/**
 * 猴子選大王:一群猴子排成一圈,按1,2,…,n依次編號。
 * 然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,
 * 如此不停的進行下去,直到最後只剩下一隻猴子為止,那隻猴子就叫做大王。
 * 要求程式設計模擬此過程,輸入m、n, 輸出最後那個大王的編號。用程式模擬該過程。
 */
function numOfKing($n, $m)
{
    $arr = range(1, $n);    // 1 - n

    $i=0;    // 陣列索引從 0 開始。 陣列剩餘一個元素為結束條件    
while(count($arr>1)) { if( ($i+1)%$m==0 ) { unset($arr[$i]); // 將數到的數字移除 } else { // 將不是的從當前位置刪除,放到陣列的結尾處。 array_push($arr, $arr[$i]); unset($arr[$i]); } $i++; // 不停地往後數 } return $arr[$i]; }