【題目】一 群猴子排成一圈,按1,2,…,n依次編号。然後從第1隻開始數,數到第m隻,把它踢出圈,從它後面再開始數,再數到第m隻,在把它踢出去…,如此不停的 進行下去,直到最後隻剩下一隻猴子為止,那隻猴子就叫做大王。要求程式設計模拟此過程,輸入m、n, 輸出最後那個大王的編号。
邏輯梳理
将所有的猴子放入數組中;周遊數組,判斷目前猴子序号是否出局,猴子出局直接unset掉,不出局将猴子放到數組最後,繼續輪詢。當數組長度等于1時,結束,傳回結果。
代碼實作
// $n猴子個數 $m第幾個位置
function fn($n, $m)
{
//将猴子數量放到數組内
for ($i = 1; $i < $n + 1; $i++) {
$arr[] = $i;
}
$i = 0;
//當數組内隻剩下一個值跳出數組
while (count($arr) > 1) {
//周遊數組,判斷目前猴子是否為出局序号,如果是則出局,否則放到數組最後
if (($i + 1) % $m == 0) {
//當循環次數滿足m值 去除掉目前值
unset($arr[$i]);
} else {
//不滿足循環次數 放到數組對尾
array_push($arr, $arr[$i]);
//删除掉目前循環内容
unset($arr[$i]);
}
$i++;
}
return $arr;
}
// 調用
var_dump(fn(15,7));