替代FizzBu​​zz问题

时间:2008-09-22 21:39:24

标签: fizzbuzz

任何人都有任何不是 FizzBu​​zz问题的好的FizzBu​​zz类型问题?

我正在采访某人,而FB相对众所周知而且难以记忆,所以我在寻找创意的第一站就是我的新成瘾。

14 个答案:

答案 0 :(得分:99)

我已经看到了一小部分用于清除候选人的相对简单的编程问题,就像FizzBu​​zz一样。以下是我看到的一些问题,为了增加难度:

  1. 反转字符串
  2. 反转句子(“bob喜欢狗” - >“狗喜欢bob”)
  3. 在列表中找到最小值
  4. 在列表中找到最大值
  5. 计算余数(给出分子和分母)
  6. 从包含重复项的列表中返回不同的值(即“1 3 5 3 7 3 1 1 5” - >“1 3 5 7”)
  7. 返回不同的值及其计数(即上面的列表变为“1(3)3(3)5(2)7(1)”)
  8. 给定一串表达式(仅变量,+和 - )和一组变量/值对(即a = 1,b = 7,c = 3,d = 14)返回表达式的结果( “a + b + c -d”将是-3)。
  9. 这些是针对Java的,您可以使用标准库,因此其中一些可以非常简单(如6)。但他们像FizzBu​​zz一样工作。如果你有关于编程的线索,你应该能够很快地做到最好。即使你不熟悉这门语言,你至少应该能够提出如何做某事的想法。

    使用这个测试,我之前的一位老板看到的一切都是从那些能够快速完成这一切的人那里,到能够做得最快的人,到一个半小时后无法接听一个人的人。

    我还应该注意:他让人们在完成这些任务时使用他的电脑。他们被明确指示他们可以使用Google等。

答案 1 :(得分:28)

也许这不会直接回答你的问题,但我不确定你是否需要提出另一个问题。除了“易于记忆”之外,FizzBu​​zz问题只是简单的“简单”,这就是重点。如果您正在面试的人属于FizzBu​​zz“众所周知”的人群,那么他们就属于FizzBu​​zz类型问题无法过滤掉的人。这并不意味着你当场雇用他们,但这确实意味着他们应该能够轻松地通过它并接受采访的内容。

换句话说,任何花时间阅读Coding Horror的人都值得进一步采访。让他们真的快速写出解决方案,简要讨论一下(例如,你如何测试它?),然后继续讨论下一个问题。正如文章所说,“真正令人惊讶的是,有多少候选人无法完成最简单的编程任务。”

答案 2 :(得分:23)

来自Project Euler的任何早期版本都可能是好的。

例如:

  

Problem 25

     

Fibonacci序列由递归关系定义:

Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
     

因此,前12个术语将是:

F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144
     

第12个学期F12是第一个包含三位数的术语。

     

Fibonacci序列中第一项的索引是多少   包含1000位数?

答案 3 :(得分:11)

我发现检查一个字符串,如果它是一个回文是一个非常简单的,可以是一个体面的除草器。

答案 4 :(得分:10)

我想要一个不涉及模运算符的FizzBu​​zz问题。特别是因为我经常采访网络开发人员,模数运算符通常不会出现。如果这不是你经常遇到的事情,那就是你需要它几次看的东西之一。

(当然,这是一个概念,理想情况下,你应该在某个地方的某个数学课程中遇到过,但这是一个不同的主题。)

所以,我想出的就是我所说的,缺乏想象力,反向三分球。说明是:

  

编写一个程序,以逆序打印出1到200之间每3的倍数。

按正常顺序执行它很容易:将循环索引乘以3,直到达到超过200的数字,然后退出。您不必担心在之后终止多少次迭代,您只需继续操作直到达到第一个太高的值。

但是倒退,你必须知道从哪里开始。有些人可能直观地认识到198(3 * 66)是3的最高倍数,因此,硬编码66进入循环。其他人可能会使用数学运算(整数除法或浮点除法为200和3的整数除法)来计算出这个数字,并且这样做可以提供更普遍适用的东西。

基本上,它与FizzBu​​zz的问题相同(循环遍历值并将其打印出来,带有扭曲)。这是一个需要解决的问题,它不会像模数操作一样(相对)深奥。

答案 5 :(得分:8)

对于可以在10秒内完成的非常简单的事情,但是会删除那些无法编程任何的人,试试这个:

  

问:给我看(在纸上,但更好   如何交换你的白板   两个变量的值。

这不是我的想法,但posted in a comment上有一个名叫Jacob的人blog post关于最初的FizzBu​​zz问题。{/ p>

雅各继续说:

  

如果他们启动并创建了一个   第三个变量,你可以   把那个人写下来。我发现了   我可以削减三分之一到一半   (诚​​然,此时未经筛选)   只有那个问题的申请人。

在关于原始博客文章的评论之后,还有一个有趣的讨论,关于如何执行此变量交换而不需要第三个变量(添加/减去,xor等),当然,如果你使用的是一种语言在单个语句/操作中支持这一点,它可能不是一个好的测试。

虽然不是我的想法,但我想在这里发布,因为它是一个优雅简单,简单易懂的问题,可以(并且应该)在10秒钟内被一个写过最简单程序的人回答。它也不需要使用像modulo运算符那样模糊不清的运算符,很多人都是相当不错的程序员,根本不熟悉(我根据自己的经验知道)。

答案 6 :(得分:7)

Fibonacci,反向字符串,计数字节中设置的位数是其他常见的。 Project Euler也有越来越多的难度。

答案 7 :(得分:3)

让他们写一个应用程序来返回给定数字的因子。这很容易做,很难在短时间内做好。你可以在很短的时间内看到他们的风格以及他们思考问题的方式。

答案 8 :(得分:2)

  

返回第一个索引   在字符串Y中出现字符串X

实现strstr()需要对语言有基本的了解,同时提供巧妙优化的机会。

答案 9 :(得分:2)

如果是C / C ++面试,请确保该人知道指针。

一般 - 简单算法([单/双]链表)。询问每种情况下添加的复杂性(在开始时,最后,优化......)?

(一般)如何通过3 * N / 2比较从阵列(N大小)中找到最小值和最大值?

C / C ++:如何将多个“strcat”优化到缓冲区?

答案 10 :(得分:1)

答案 11 :(得分:0)

怎么样: 我想使用单个整数来存储多个值。描述一下它是如何工作的。

如果他们对比特掩码和操作没有任何线索,他们可能无法解决其他问题。

答案 12 :(得分:0)

查找素数列表是一个相当常见的问题,但仍需要一些思考,人们可能给出不同程度的答案。

您会惊讶地发现有多少人难以实现Map / Dictionary类型的数据结构。

答案 13 :(得分:0)

我已经让我的考生创建了一个程序来计算他们选择的任何伪语言中给定数字的factorial。这是一个相当容易解决的问题,它很适合递归的自然后续问题(通常可以提出)。