简单却又复杂的FizzBuzz面试编程问题
偶然看到一篇关于stackoverflow公司的面经中提到了一个有趣的面试编程问题,如题所述:FizzBuzz问题。原文引用如下:
“在一些公平的考验之后,我发现那些因为代码而抓狂的人不是为了庞大的项目,而是在细小的地方就缠不休。所以我开始研究这些问题,收集这些编程人员的特点 和归结成一类问题,取名为“FizzBuzz 问题”。 FizzBuzz问题是一种英国学校学生经常玩的游戏。举个“FizzBuzz 问题”的例子:
写一个程序打印1到100这些数字。但是遇到数字为3的倍数的时候,打印“Fizz”替代数字,5的倍数用“Buzz”代替,既是3的倍数又是5的倍数打印“FizzBuzz”。
大部分优秀的程序员都应该能在纸上轻易地把这个程序写出来,也就几分钟的事情。但你想知道一个令人震惊的事实吗?多数计算机科学专业的毕业生不会做这道题。我还见过一个自称是高级程序员的人做这道题,他居然花了10~15分钟。
Dan Kegel在招聘初级程序员的时候,也经历了类似的事情:令人惊讶的是,有相当一部分的应聘者(包括那些获得计算机科学专业的硕士或博士学位的人),当他们被要求完成一个基本的编程任务时,他们都通不过,因此面试失败。举例来说,我曾经碰到过一些毕业生,他们居然回答不出"写一个从1数到10的循环"或者"在16进制里F后面的数是什么"之类的问题。如果务实一点,我在面试中也碰到过很多应聘者,他们不会用递归去解决一个实际的问题。但这些都是基本的技能。如果他们不会,只能说明他们很可能根本就没写过程序。
乍看这个问题的时候感觉题目叙述很清楚啊,思路也很简单啊,比现在很多公司用的字符串逆序,字符串空格替换啥的简单多了啊,为什么还会如此火地作为一个面试编程题?自己动手写了个,1分钟搞定,没毛病。然后怀着疑问就去百度了下,还真有各种论坛、博客等网站都在讨论怎么写。然后看了下那些不屑一顾的编程爱好者们贴出来的代码,看完大家的代码后,我的内心是崩溃的,终于知道为什么这也能作为程序员们的面试编程题目了