php实现约瑟夫算法 [猴子选大王]

最近看到群里有发一道面试题,感觉挺有意思,

直接上代码:

<?php
/*
一群猴子排成一圈,按1,2,...,m依次编号。然后从第1只开始数,数到第n只,把它踢出圈,从它后面再开始数,再数到第n只,在把它踢出去...,
如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入n、m, 输出最后那个大王的编号。
约瑟夫算法,呵呵,看了网上的大虾们的代码,感觉很不容易理解,而且还繁琐,于是自己就写了段代码
*/

function circling($m, $n)
{
    $array = range(1, $m);
    $i = 0;
    do
    {
        $i++;
        $crr = current($array);
        if ( empty($crr) ) 
        {
            reset($array);
        }

        if( count($array) == 1 )
        {
            return current($array);
        }

        if( $i == $n )
        {
            unset( $array[key($array)] );
            $i = 0;
            continue;
        }

        next($array);
    }
    while (true);
}

echo circling(6, 4);    

 

 

posted @ 2013-03-06 11:02  tywei  阅读(169)  评论(0)    收藏  举报