一个面试题

一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号:

 1 $m = 13;
 2 $n = 20;
 3 $j = 0;
 4 $monkey = array();
 5 for($i = 0; $i < $n; $i++) //给猴子编号,下标从零开始
 6 {
 7     $monkey[$i] = $i;
 8 }
 9 
10 echo getking($monkey,$m);
11 
12 function getking($arr,$m) //一个递归程序

13 {
14     $arr = array_values($arr);
15     
16     if(count($arr) == 1)
17     {
18         return $arr[0];
19     }
20     else
21     {
22         if(count($arr) >= $m)
23         {
24             unset($arr[$m-1]);
25         }
26         else
27         {
28             unset($arr[($m%count($arr))-1]);
29         }
30         return getking($arr,$m);
31     }
32 }

 

 

posted @ 2014-03-14 14:48  lrxing  阅读(151)  评论(0编辑  收藏  举报