鍍金池/ 問答/人工智能  PHP/ 猴子當大王的算法解析

猴子當大王的算法解析

一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數(shù),數(shù)到第m只,把它踢出圈,從它后面再開始數(shù),再數(shù)到第m只,在把它踢出去…,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n,輸出最后那個大王的編號。提示:約瑟夫環(huán)問題。
答案:
<?php

function yuesefu($n,$m) 
{ 
    $r=0; 
    for($i=2; $i<=$n; $i++) 
    { 
        $r=($r+$m)%$i; 
    } 
    return $r+1; 
} 
echo(yuesefu(5,3));

?>

想問下為什么可以使用這個方式進行求出最后的勝利者?看到很多比較復雜遞歸的算法都沒有這個簡單,所以想找人分析下,謝謝了。

回答
編輯回答
兔囡囡

根據(jù)約瑟夫環(huán)的推導公式f(n) = x = (f(n-1) + 3) % n直接套用的,這是個經(jīng)典問題,百科解釋已經(jīng)很全面了

2017年3月10日 01:02