首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能解决我在php采访中被问到的问题吗?

你能解决我在php采访中被问到的问题吗?
EN

Stack Overflow用户
提问于 2011-11-26 05:14:10
回答 5查看 2.6K关注 0票数 0

php中编写一个函数,找出囚犯越狱的次数。

一名囚犯跳过一堵墙逃出了监狱。他可以跳x米的高度,但每次跳完之后,他就会滑到米高。

函数应该使用四个参数,它们是:

  1. 他能跳到最大高度
  2. 他从墙上滑下来的米数
  3. 墙高
  4. 墙数

例如:(10,1,11,2):

这意味着囚犯可以跳过10米的高度。

他每跳一次就滑下1米。

墙高是11米。

2墙。

这个问题的输出应该是:4 (我猜)

解释:

在他的第一跳中,跳到10米高,但滑下1米,因此有效跳高为9米,然后在第二跳中,他从9米处开始,再跳一次,成功地爬上了第一堵墙。要爬第二堵墙,他必须再次经历同样的过程。

我数学不好。这就是为什么我不知道如何把它们组合在一起,用它们建立一个等式。

这个问题是在我作为新鲜的php开发人员申请时被问到的。你认为向一个新人提出这样的问题是有道理的吗?

EN

回答 5

Stack Overflow用户

发布于 2011-11-26 05:21:42

并不真正测试您的php知识,但肯定会测试您的问题解决技巧。我认为在面试中问这个问题是相当合理的。

代码语言:javascript
复制
function returnCounts($jump,$slip,$height,$walls)
{
   $count = 0;

   while(true)
   {
      $count++;
      $height -= $jump;
      if ($height <= 0)
      {
          return $walls * $count;
      }
      else
      {
          $height += $slip;
      }
   }
}

我还没有测试过这个,但是像这样的东西应该能用

票数 3
EN

Stack Overflow用户

发布于 2011-11-26 05:30:45

我猜他们想让你想办法做到这一点,而不用写一个循环来“模拟”囚犯的逃跑。

很明显,如果没有“滑倒”,那将是微不足道的--

代码语言:javascript
复制
return ceil($wallheight / $jumpheight) * $walls;

这个滑动似乎给这个方程带来了一个扳手,但是当你考虑到边缘情况时,很明显它可以很容易地处理。如果他跳了5但滑了4,会发生什么?假设墙高为10。跳到5,滑到1。跳到6,滑到2。跳到7,滑到3。跳到8,滑到4。跳到9,滑到5。跳起来然后逃跑。

因此,我们可以简单地从墙上移除跳高,然后除以他的跳跃和滑倒(四舍五入)之间的差异。别忘了(就像我一样!)再加上“最后一跳”!

代码语言:javascript
复制
function count_jumps($jumpheight, $slipheight, $wallheight, $walls) {
    if($jumpheight > $wallheight) return $walls;
    else return (ceil(($wallheight - $jumpheight) / ($jumpheight - $slipheight)) + 1) * $walls;
}

编辑:修正。

编辑2:请注意,此函数可能会产生错误或负面结果,但它们都会出现返回值无限或未定义的情况(滑移>=跳转)。在面试的情况下,你应该问你的面试官他们希望如何处理这些案件。

票数 2
EN

Stack Overflow用户

发布于 2011-11-26 05:31:09

使用一些基本代数,您可以消除对任何循环的需求:

代码语言:javascript
复制
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英尺高,你需要跳两次才能完全清除墙壁)。简单地把它乘以他必须缩放的墙壁的数量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8276448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档