4.22日百度发布了这样一个面试题,看似很简单,但是却淘汰了近乎85%的人
题目:依序遍历0到100闭区间内所有的正整数,如果该数字能被3整除,则输出该数字及‘*’标记;如果该数字能被5整除,则输出该数字及‘#’标记;如果该数字既能被3整除又能被5整除,则输出该数字及‘*#’标记。
错误代码示范:
public void foo() {
for (int i = 0; i < 100; i++) {
if (i % 3 == 0) {
System.out.println(i + " *");
} else if (i % 5 == 0) {
System.out.println(i + " #");
} else if (i % 3 == 0 && i % 5 == 0) {
System.out.println(i + " *#");
}
}
}
目前笔者觉得的最优代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int add[7] = {3,2,1,3,1,2,3};
char c[6] = {'*','#','*','*','#','*'};
string all = "*#";
int i = 0;
int index = 0;
while((i += add[index]) <= 100)
{
//add数组和c数组之间进行对应
if(index != 6)
{
cout << i << c[index] << endl;
index++;
}
//每间隔15个单位输出*#
else
{
cout << i << all << endl;
index = 0;
}
}
return 0;
}
此次答题共性问题剖析:
在实际面试中,面试官通过查看学生现场书写的代码,评估其在代码书写规范、逻辑思维以及编程语言运用等方面的能力。在面试者书写代码的短短数分钟内,大部分人实现程序功能,少有人考虑算法优化。而对算法优化的思考,更多是在与面试官沟通程序思路过程中阐述的。所以,同学们不必担心面试时写不出最佳代码,首先要保证审题正确,其次代码书写规范、逻辑清晰,然后才是在与面试官互动过程中,补充你对算法优化的想法。