/**
*
@param int $n
* @param int $m
* 数猴子那道题
*/
function whichOne($n=1,$m=1){
$arr = array();
for($i=1;$i<=$n;$i++){
$arr[] = $i; //用数组包装
}
$last = last($arr,$m);
echo $last;
}
/**
* @param string $arr
* @param int $m
*
@return int
* 递归寻找最后一个
*/
function last($arr,$m){
$num = count($arr); //看是不是只有一个
if($num==1){
return $arr[0];
}else{
$newArr = array(); //一个足够长的数组拼接,个数要超过$m
for($i=0;$i<$m;$i++){
foreach($arr as $val){
$newArr[] = $val;
}
}
$str = ','.implode(',',$arr).','; //将封装的原数组解开放在字符串中都用,包裹
$lost = ','.(string)$newArr[$m-1].','; //将要剔除的猴子用,包裹
$star = trim(ltrim(strstr($str,$lost),$lost),','); //取剔除猴子之后的猴子放前面
$last = trim(strstr($str,$lost,true),','); //取剔除猴子之前的猴子放后面
if($last!=''&&$star!=''){ //将前后拼接在一起
$string = $star.','.$last;
}elseif($last!=''){ //排除有空白的现象
$string = $last;
}else{
$string = $star;
}
$listArr = explode(',',$string); //再用数组包裹起来
return last($listArr,$m);
}
}
whichOne(3,6);