百度的一道面试题是如何淘汰了85%的程序员?

题目

依序遍历0到100闭区间内所有的正整数,如果该数字能被3整除,则输出该数字及‘*’标记;如果该数字能被5整除,则输出该数字及‘#’标记;如果该数字既能被3整除又能被5整除,则输出该数字及‘*#’标记。

这道看似非常简单的题目,却潜藏着几个玄机。面试官通过这道题,考察学生在语法、语义、语用以及算法优化方面的能力。现实告诉我们,通过这一道题目,就可以淘汰85%的面试者。看似残酷的考察方式,却也体现出学生在基础知识、动手能力到思维能力上的差距。

比较low的写法:

<code>public class Demo{
\tpublic static void main(String[] args){
\t\tfor(int i=1;i<=100;i++){
\t\t\tif(i%3==0&&i%5==0){
\t\t\t\tSystem.out.println(i+"*#");
\t\t\t\t}else
\t\t\t\tif(i%3==0){
\t\t\t\t\tSystem.out.println(i+"*");
\t\t\t\t\t}else
\t\t\t\t\tif(i%5==0){
\t\t\t\t\tSystem.out.println(i+"#");
\t\t\t\t\t}
\t\t}
\t}
}/<code>

优化后:

<code>public class Demo{
\tpublic static void main(String[] args){
\t\tString result="";
\t\tfor(int i=1;i<=100;i++){
\t\t\tresult=i%3==0?"*":"";
\t\t\tresult+=i%5==0?"#":"";
\t\t\tif(!"".equals(result)){
\t\t\tSystem.out.println(i+result);
\t\t }
\t\t}
\t}

}/<code>

当然频繁的对字符串操作,我们应该使用Stringbuffer或Stringbuilder

百度的一道面试题是如何淘汰了85%的程序员?


分享到:


相關文章: