首頁  >  文章  >  後端開發  >  一文解決約瑟夫環問題(PHP版)

一文解決約瑟夫環問題(PHP版)

藏色散人
藏色散人轉載
2021-12-31 15:19:564107瀏覽

本篇文章帶大家介紹PHP版的約瑟夫環問題(猴子選大王)。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

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

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

一群猴子排成一圈,按1,2,…,n依序編號。

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

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

用程式模擬這個過程,程式碼如下:

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

約瑟夫問題來歷:

這個問題是以弗拉維奧·約瑟夫命名的,它是1世紀的猶太歷史學家。他在自己的日記中寫道,他和他的40個戰友被羅馬軍隊包圍在洞中。他們討論是自殺還是被俘,最後決定自殺,並以抽籤的方式決定誰殺掉誰。約瑟夫斯和另外一個人是最後兩個留下來的人。約瑟夫斯說服了那個人,他們將向羅馬軍隊投降,不再自殺。約瑟夫斯把他的存活歸功於運氣或天意,他不知道是哪一個。

推薦學習:《PHP影片教學

以上是一文解決約瑟夫環問題(PHP版)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:awaimai.com。如有侵權,請聯絡admin@php.cn刪除