一群猴子排成一圈,按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 }