华为的机试题主要涵盖了几方面的计算机基础知识,包括坐标运算、身份证号码合法性判断以及联系人姓名在手机上的数字匹配。下面将分别对这三个知识点进行详细解释。
1. **坐标运算及矩形面积计算**
在这道题目中,我们需要计算一个点A在东南西北四个方向移动后,与坐标原点、移动后位置、以及移动后位置的X轴和Y轴投影点所构成的矩形面积。函数`calculateArea(int x, int y, char dir)`接受三个参数,分别是点A的初始横坐标x、纵坐标y和移动方向dir。dir有'e'(东)、's'(南)、'w'(西)和'n'(北)四种可能。移动后,新的坐标可以通过简单的加减运算得到,例如,向东移动(x' = x + 1, y' = y),向南移动(y' = y + 1)等。计算矩形面积,就是计算新坐标(x', y')、原点(0, 0)、(x', 0)和(0, y')围成的矩形,面积公式为`|x'| * |y'|`。例如,当输入x=1, y=1, dir='e'时,面积为2;输入x=1, y=0, dir='e'时,面积为0。
2. **身份证号码合法性判断**
身份证号码的合法性检查涉及到多个条件。长度必须为18位。1到17位必须是数字,18位可以是数字或小写字母'x'。同时,还需要验证7到14位代表的出生日期信息,月日信息需符合实际日期规则。例如,'19880808'表示1988年8月8日,而'1308'或'0832'则表示无效日期。函数`verifyIDCard(char* input)`需要返回一个整数,表示身份证号的合法性状态。具体返回值如下:
- 0:身份证号合法
- 1:长度不合法
- 2:第1到17位含有非数字字符
- 3:第18位既不是数字也不是'x'
- 4:日期信息非法
3. **联系人姓名在手机上的数字匹配**
这一问题涉及到字符串处理和映射规则。联系人姓名的数字匹配规则有两个:连续字母匹配和首字母匹配。对于英文姓名,不区分大小写,姓和名之间只有一个空格。如果姓名只有一个单词,返回前3个字母对应的数字;如果有多个单词,返回前三个单词的首字母对应数字。函数`getLetter2NumIndex(char* strName, char *numIndex)`需要返回一个字符串,包含匹配的数字。例如,"John Smith"匹配的数字为"5647","Johnsmith"匹配的数字为"57"。
这些题目旨在考察应聘者的算法基础、逻辑思维以及对实际问题的解决能力,是华为招聘软件研发岗位时可能遇到的技能测试。通过这些题目,可以看出应聘者是否具备扎实的编程基础,以及能否灵活运用这些知识解决实际问题。