如同往年,华为今年刚一开学就来学校宣讲了,9月6日和7日安排了软件研发类的上机笔试(其他职位没有笔试,直接通过网上注册的简历筛选并安排面试)。
说下华为上机考试的特点和一些注意事项:
(1)考试时长为2个小时,总共有3个题(去年是2个题,难度要比今年大些),使用的是VC 6.0;
(2)3个题目中大致第一个题是最简单的,第三个题是最难的,这个难度只是假设你对所有的题都不熟悉而言的,所以在拿到题目过后一定要把所有题目过一遍,弄懂它们的要点,看是否有自己熟悉的题目,也做到心里有数。这算得上是我昨天笔试的时候的一个教训吧;
(3)从服务器上下载题目下来后最好能把工程保存到在电脑重启后不会自动还原的磁盘分区下面,这样不致由于各种意外因素电脑重启过后编的程序不会消失;
(4)不要改动所给函数的原型,可以自己添加函数。另外,华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数。
以上便是我对于这次考试了解的一些情况,下面说说我做的3个笔试题(题意我只能大概的按我的理解组织下)。
1. 从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。
函数原型为 int compare_array( int len1, int array1[], int len2, int array2[] );
其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。
以下是上题的函数实现:
1 int compare_array( int len1, int array1[], int len2, int array2[] )
2 {
3 int i;
4 /*两个数组最小程度*/
5 int min_len;
6 /*两个数组不同元素的个数,初始化为0*/
7 int diff_num=0;
8
9 /*找出两个数组的最小的长度*/
10 len1<len2 ? (min_len=len1) : (min_len=len2);
11
12 for( i=1; i<=min_len; i++ )
13 {
14 if( array1[len1-i] != array2[len2-i] )
15 diff_num++;
16 }
17
18 return diff_num;
19 }
2. 约瑟夫环(待添加)
3. 字符串四则运算的实现
题目大意:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是1位(数值范围0~9)。另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。
若有字符串"8+7*2-9/3",计算出其值为19。
主要考点:1. 数字的字符形式变换为数字形式的方法; 2. 数字的数字形式变换为数字的字符串形式的方法。
转自:http://www.cnblogs.com/McFlyChen/archive/2011/09/08/2171392.html