华为机试感悟

前天接到通知,今天下午去滨江参加机试,1点钟开始,到滨江还早,却赶了很长一段路才压着点到了华为的机房。机房倒挺干净明朗的,里面整齐的一排排显示器,机器性能也还过的去,至少我用的那台还不错。机子只装了一个VC6.0,虽然这是事先已经知道的,但仍觉得使用过程会不习惯,一则已经很久不用VC了,追求轻便时就用CodeBlocks,想要调试功能强大时,就用VS2010,二则自己常用的IDE,不但本身提示功能齐全,而且我还装了VA,敲起代码感觉如鱼得水,轻快愉悦啊。不过,坦诚的说,一个不卡的机器,一个还算熟悉和强大的编译器,能提供这些,就很好很满足了,但是后面的编码过程,自己敲的确很happy,不间断的啪啪响,一边敲一边想接下来的,不用停下来选择提示框的选项,看来没有提示,或许也是一种快感吧。

机考之前是长长的,长的不能再长的,冗长的心理测试问卷。足足36部分,每部分通常还分两、三页,每页上还是许多道的问题,每题还有强烈不同意…比较不同意…强烈同意等不同选项,真是很需要耐心啊。据说心理测试也会刷人,只得每题都看完想好再填,还在集中精力时,本人的效率还是挺高的。也算是率先完成了问卷,进入了测试题目吧。

考题是三道,我看了一眼题目后,就依次从第1题开始做,这个系统之前让我们体验过,所以用起来还顺手。第一题是密码,设a~z 为数字1~26,A~Z为27~52,给定一个字母,获取其数字x, f = x*x +x +1,f 为加密后的字符的数字,如果超过52,则取52的模,f转换为相应的字符,就是加密后的字符。问题输入是一个字符串,要求输出是这串字母的加密后的字符串。问题很简单,就象是C语言教材后面的练习题,简单的转换就可以了。

第二题也是类似C语言教材后面的练习题,简单的字符统计即可。题目是这样的,要求判断一个密码是否符合条件:1. 8~20个字符,2,只能是数字,字母,和给定的一些特殊字符(请允许我记不全了),3. 数字,小写字母,大写字母,特殊字符,必须至少包含以上四种中的三种。问题输入是若干行密码,要求输出是true(符合)或false(不符合)。依次遍历一遍密码即可。

前两题做的很快,几乎是看完题目就敲代码,一边敲一边想。

进入第三题,问题有些复杂,叫好友管理。给了一大堆变量,还有什么好友推荐。最后结合测试样例才看懂的,也就那么回事,虽然说的那么复杂(我觉得题目中表述还可以再改进改进)。简单的说,就是给定一个人名,再给定几组人名,每组人名包括两个人名,这两个人就是好友,好友是相互的。好友推荐呢,就是,如果两个人不是好友,但是有超过p个共同好友,就推荐为好友(写到这,我发现我当时是不是理解的有问题,把这个好友推荐没弄清楚,到底这么个推荐规则,我当时好像是把两个人的所有好友都互加为好友了,唉,原来如此,醒悟的太晚了,给我弄复杂了)。我就用一个class User{} 来代表一个用户,他有AddFriend(),FrientCnt()等函数,内部使用一个vector容器保存他所有的好友。这样就很方便管理了。代码写了一会,行数有点多,测试了一下样例,可以跑通,就匆匆提交了。刷新后却是答案错误,错误信息就是判题系统的测试样例没有跑通。有点纳闷啊。代码写的匆匆貌似也不很好调试,况且要我我写一个测试样例又太麻烦了,改过几次,都没有通过。有点懊恼啊。感觉这题目不难啊,但是通不过,还不知道错在哪,郁闷啊。

反正就这样了,还是讲讲感悟吧。

平时多做些OJ或者其它类似的判断系统还是很有好处的,遇到题目时,思路会清晰。这段时间我就在搞ProjectEuler,每到题目我都希望用更多中方法去解决,用C\C++和Python两种语言去解决。做的多了,机试就像平时做题一样,投入进去了,就慢慢忘了周围的一切,不会有那么紧张。(虽然最后我还是感觉有点急躁,不过整场考完还是心情保持的很好,毕竟这也是第一次机考嘛)

使用C++会比C更高效。我不是说的运行速度,我是说的解题速度。之前我还经常会使用C,但是一到机试,发现明显使用C++会顺手的多,至少变量定义一块,就舒服很多。还有一点,就是使用STL中的容器和算法,会免去很多不必要的代码,也就减少了出错率。对于动态大小的数组,我都是使用vector去替代,不用自己考虑内存分配什么的问题,很方便。今天三题都是用的C++,很顺手吧还是。虽然之前还在C和C++之间犹豫,舍不得C的一些东西,尤其什么printf之类的格式化输出。

不知道接下来是什么结果,慢慢等吧。

作者:JarvisChu
原文链接:华为机试感悟
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

发表评论