关于猴子选大王的问题

看到这样一个问题:有m只猴子,从1开始数到n,第n只猴子退出,如此循环执行下去,直到剩下最后一只猴子,求该猴子的编号?
试着写了一个模拟报数
<?php
/*************************************************************************
    > File Name: getMonkeyKing.php
    > Author: firmy
    > Mail: firmy@foxmail.com
    > Created Time: 2013年03月01日 16时11分48秒 CST
************************************************************************/
//猴子选大王的程序。首先输入猴子的数目m,然后输入每次查猴子的数目n。每数N次删除一个猴子。最后剩下的是大王。
 
function getKing($m,$n){
    //构造队列
    for($i=1;$i<=$m;$i++){
        $list[$i] = $i;
    }
    $j = 1;//设定指针
    $k = 1;
    while(count($list)>1){
        $k = ($k==($n+1))?1:$k;
        echo current($list)."=>{$k}\n";
        if(($j%$n) == 0){
            echo "===========throw {$list[$j]} out,next================\n";
            unset($list[$j]);
        }else{
            array_push($list,$list[$j]);
            unset($list[$j]);
        }
        $j++; //从下一只猴子开始数
        $k++;
    }
    echo "the king is :".current($list).";haha!!!\n";
 
    return $list;
}
$monkeyNum = $argv[1];
$num = $argv[2];
getKing($monkeyNum,$num);
 
 
测试一下:
 
 




posted @ 2013-03-02 11:39  firmy  阅读(238)  评论(0编辑  收藏  举报