哪隻猴子可以當大王-經典算法題

題目描述:
一羣猴子排成一圈,按1,2,.,n 依次編號。然後從第1只開始數,數到第m只,把
它踢出圈,從它後面再開始數,再數到第m只,再把它踢出去······,如此不停地進行下去,
直到最後只剩下一隻猴子爲止,那隻猴子就可以當大王。要求編程模擬此過程,輸入m、n,
輸出最後那個大王的編號。
分析與解答:
首先將猴子從1到n編號存放在數組中,對猴子的總個數進行循環,循環時將數到編號
的猴子從數組刪除,將沒有數到編號的猴子從原位置移到數組末尾,移動後需將原位置的編
號刪除。只要判斷該編號數組個數大於1都繼續循環,直到數組最後只剩下一個編號,那麼
這個編號就是當大王的猴子。

function monkeyKing($n,$m){
    $monkeys = range(1, $n); //函數創建一個包含指定範圍的元素的數組
    $i = 0;
    while (count($monkeys) > 1){
        if (($i   1)%$m == 0) {
            unset($monkeys[$i]);
        }else{
            array_push($monkeys, $monkeys[$i]);
            unset($monkeys[$i]);
        }
        $i   ;
    }
    
    return current($monkeys); //輸出數組中的當前元素的值
}

$monkey = monkeyKing(5, 2);
echo "最後當王的猴子編號是:".$monkey;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章