百度的一道面試題是如何淘汰了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%的程序員?


分享到:


相關文章: