当今求职者时经常会遇到一些怪异或者闻所未闻的面试题,如:
谷歌创始人面试题:如何把布林(创始人)的灵魂卖给魔鬼?
微软面试题:为什么下水道井盖是圆的?
当然这么怪异的题在中国并不多见,但可以从侧面看到IT公司对面试者的思维的活跃度、逻辑的正确性等等要求之高。当然这两道题并没有准确的答案,仁者见仁智者见智。
好了,思考过怪异问题后让我们思考些靠谱的实际的面试问题。下面这是一道面试题,专门为PHP程序员而出。
说:树上qi个猴,地下yi个猴,一共几个猴?哈哈,不开玩笑了。
真题在下面:
一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,
输出最后那个大王的编号。(参数自己给定)
希望看完这贴对你有所帮助哦!
/*
*/
//编号为n,猴子个数为m
function
myfilter($val){
return $val != $GLOBALS['out'];
}
/**
*@name
上题的函数
*@param number number
*@return number 最后当大王的猴子数
*@author
李洋
*
*/
function monkeyNum($n,$m){
$GLOBALS['mod'] =
empty($GLOBALS['mod'])?$m:$GLOBALS['mod'];
//每次out一个元素后的数组,全局
$GLOBALS['monkeyArr']
= empty($GLOBALS['monkeyArr'])? range(1,$m) :
$GLOBALS['monkeyArr'];
//数组后添加$i次数组用于取值
for($i = 0; $i <=
$n; $i++){
if(($i*$m+$GLOBALS['mod']) >=
$n){
//return $i;
/* echo $i;
echo
'
';
*/
break;
}
}
//组装一个新数组将他循环添加到数组元素个数大于等于编号数的一个新数组
//新数组的初始值
print_r($GLOBALS['monkeyArr']);
echo
'
';
$newArr = empty($GLOBALS['begin'])
?$GLOBALS['monkeyArr'] : $GLOBALS['begin'];
for($j = 0; $j < $i;
$j++){
$newArr =
array_merge($newArr,$GLOBALS['monkeyArr']);
}
print_r($newArr);
echo
'
';
//数组中弹出的元素
$GLOBALS['out'] =
$newArr[$n-1];
echo $GLOBALS['out'];
echo '
';
//数组截取后的剩余元素付给newArr的初值
$GLOBALS['begin'] =
array_slice($newArr,$n);
//截取后猴子元素组成的新数组
$GLOBALS['monkeyArr']
=
array_values(array_filter($GLOBALS['monkeyArr'],'myfilter'));
print_r($GLOBALS['monkeyArr']);
echo
'
';
if(count($GLOBALS['monkeyArr']) ==
1){
echo
$GLOBALS['monkeyArr'][0];
}else{
$GLOBALS['mod'] =
count($GLOBALS['begin']);
$m =
count($GLOBALS['monkeyArr']);
monkeyNum($n,$m);
}
}
monkeyNum(5,5);
原文地址:
阅读(315) | 评论(0) | 转发(0) |