返回信息流题目:
编程,顺次遍历1、2、3、4……100,对于每个数:
如果它能被3整除,不能被5整除,打印"nice",回车。
如果它能被5整除,不能被3整除,打印"boat",回车。
如果它同时能被3和5整除,打印"niceboat",回车。
其它情况跳过该数。
用你熟悉的编程语言。
上次coolfantasy在这个版发过这个题。见: http://bbs.byr.cn/article/SoftDesign/26295
www.codinghorror.com也介绍过这个问题(见 http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html ),据说能刷掉80%的号称自己会编程的应聘者,还有自称是“高级程序员”的人,要用超过10-15分钟才写出程序。
我不信这个问题有这么难。昨天,看到我们实验室有一个哥们在用Eclipse编Java。他以前是学C++的,因为导师要求,开始学Java,看了1个月的Thinking In Java。我说,你的Java看上去很不错了,试试这个问题吧。于是,我把那个面试题给他说了说,他完全理解题意,说这不是很简单嘛。我说,既然很简单,就做做呗,反正也是练习嘛。
10分钟以后,他的程序写好了,但是问我,我的程序怎么陷入死循环了?
我懵了,这程序,只有最简单的for循环,怎么可能死循环呢?但是一瞻仰他的程序:
class Main {
public static void main(String[] args) {
int i;
for(i=1; i<=100; i++) {
while(i%3==0) {
System.out.println("nice");
}
while(i%5==0) {
System.out.println("boat");
}
while(i%3==0 && i%5==0) {
System.out.println("niceboat");
}
}
}
}
花了一点时间给他解释while不是if,死循环如何出现在i==3的时候。然后他改成
if(i%3==0 && i%5==0) {
System.out.println("niceboat");
}
if(i%3==0) {
System.out.println("nice");
}
if(i%5==0) {
System.out.println("boat");
}
虽然不死循环了,但是他并不理解程序哪里还有错误。然后,又用了5分钟左右,仔细数了数输出的nice和boat的个数,尤其是两行niceboat之间nice和boat的个数,又花了一些时间思考程序的流程,加上了else:
if(i%3==0 && i%5==0) {
System.out.println("niceboat");
} else if(i%3==0) {
System.out.println("nice");
} else if(i%5==0) {
System.out.println("boat");
}
当我给他说这是面试题的时候,他有点诧异;又告诉他这道题可以淘汰80%的人的时候,他亦感到很吃惊。
说实话,这个事实对我来说也感觉很吃惊。我本以为这80%只是个传说而已,没想到真的有人会被这个问题考住。
这是一条镜像帖。来源:北邮人论坛 / soft-design / #38191同步于 2010/4/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
面试题(据说可以淘汰80%的号称自己会编程的人)
wks
2010/4/30镜像同步82 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
是啊 我看完就疼死了。。。
【 在 jokerlee (Jackal The Dire) 的大作中提到: 】
: 话说这贴岂不是更蛋疼。。。。
: http://bbs.byr.cn/article/SoftDesign/26295