在php中编写一个函数,找出囚犯越狱的次数。
一名囚犯跳过一堵墙逃出了监狱。他可以跳x米的高度,但每次跳完之后,他就会滑到米高。
函数应该使用四个参数,它们是:
例如:(10,1,11,2):
这意味着囚犯可以跳过10米的高度。
他每跳一次就滑下1米。
墙高是11米。
有2墙。
这个问题的输出应该是:4 (我猜)
解释:
在他的第一跳中,跳到10米高,但滑下1米,因此有效跳高为9米,然后在第二跳中,他从9米处开始,再跳一次,成功地爬上了第一堵墙。要爬第二堵墙,他必须再次经历同样的过程。
我数学不好。这就是为什么我不知道如何把它们组合在一起,用它们建立一个等式。
这个问题是在我作为新鲜的php开发人员申请时被问到的。你认为向一个新人提出这样的问题是有道理的吗?
发布于 2011-11-26 05:21:42
并不真正测试您的php知识,但肯定会测试您的问题解决技巧。我认为在面试中问这个问题是相当合理的。
function returnCounts($jump,$slip,$height,$walls)
{
$count = 0;
while(true)
{
$count++;
$height -= $jump;
if ($height <= 0)
{
return $walls * $count;
}
else
{
$height += $slip;
}
}
}我还没有测试过这个,但是像这样的东西应该能用
发布于 2011-11-26 05:30:45
我猜他们想让你想办法做到这一点,而不用写一个循环来“模拟”囚犯的逃跑。
很明显,如果没有“滑倒”,那将是微不足道的--
return ceil($wallheight / $jumpheight) * $walls;这个滑动似乎给这个方程带来了一个扳手,但是当你考虑到边缘情况时,很明显它可以很容易地处理。如果他跳了5但滑了4,会发生什么?假设墙高为10。跳到5,滑到1。跳到6,滑到2。跳到7,滑到3。跳到8,滑到4。跳到9,滑到5。跳起来然后逃跑。
因此,我们可以简单地从墙上移除跳高,然后除以他的跳跃和滑倒(四舍五入)之间的差异。别忘了(就像我一样!)再加上“最后一跳”!
function count_jumps($jumpheight, $slipheight, $wallheight, $walls) {
if($jumpheight > $wallheight) return $walls;
else return (ceil(($wallheight - $jumpheight) / ($jumpheight - $slipheight)) + 1) * $walls;
}编辑:修正。
编辑2:请注意,此函数可能会产生错误或负面结果,但它们都会出现返回值无限或未定义的情况(滑移>=跳转)。在面试的情况下,你应该问你的面试官他们希望如何处理这些案件。
发布于 2011-11-26 05:31:09
使用一些基本代数,您可以消除对任何循环的需求:
function findJumps($jump_height, $slip, $wall_height, $walls) {
return $walls * ($jump_height > $wall_height) ? 1 : ceil(($wall_height - $slip) / ($jump_height - $slip));
}解释:
囚犯每跳一次就能得到$jump_height,但在提升中失去$slip,因此他在海拔上的变化可以表示为$jump_height - $slip。要想找出每道墙跳出多少次,只需将墙高除以$wall_height / ($jump_height - $slip)高程的变化。由于这一结果有可能是不可能的,所以我们必须与ceil() (Ex )结集。如果你跳了2英尺,墙有3英尺高,你需要跳两次才能完全清除墙壁)。简单地把它乘以他必须缩放的墙壁的数量。
https://stackoverflow.com/questions/8276448
复制相似问题