約瑟夫環問題(猴子選大王)PHP版

約瑟夫斯問題問題有時候也被描述成猴子選大王問題,題目以下。(最後會貼上約瑟夫問題的來歷)php

一羣猴子排成一圈,按1,2,…,n依次編號。編程

而後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最後只剩下一隻猴子爲止,那隻猴子就叫作大王。數組

要求編程模擬此過程,輸入m、n, 輸出最後那個大王的編號。bash

用程序模擬該過程,代碼以下:spa

<?php function monkeyKing($n, $m) { $arr = range(1, $n); //構造一個數組 $i = 1; //從第一個開始循環 while (count($arr) > 1) { //若是總數大於1 if ($i % $m != 0) { $arr[] = $arr[$i - 1]; //不被踢出則壓入數組尾部 } unset($arr[$i - 1]); //壓入數組而後刪除 $i++; //繼續循環 } return $arr[$i - 1]; //直至最後剩下一個爲大王 } print_r(monkeyKing(5, 3)); //第4只爲大王



$n = 5
 $m = 3 $arr = [1, 2, 3, 4, 5] $i $arr ---+------------------------ 1 x 2 3 4 5 1 2 x x 3 4 5 1 2 >3 x x x 4 5 1 2 4 x x x x 5 1 2 4 5 x x x x x 1 2 4 5 >6 x x x x x x 2 4 5 7 x x x x x x x 4 5 2 8 x x x x x x x x 5 2 4 >9 x x x x x x x x x 2 4 10 x x x x x x x x x x 4 2 11 x x x x x x x x x x x 2 4 >12 x x x x x x x x x x x x 4
相關文章
相關標籤/搜索