2012华为校园招聘上机笔试题+机试+自己做出来的
- 格式:pdf
- 大小:256.81 KB
- 文档页数:8
2012届华为校园招聘上机考试题目(9月6日下午1点场)分类:华为准备2011-09-08 15:10 281人阅读评论(0) 收藏举报在网上看到华为在有的地方已经开始机试了,于是决定自己先编着试试。
下面是题目和自己写的代码。
1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。
打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。
如果没有大众评委,则总分= 专家评委平均分,总分取整。
函数最终返回选手得分。
函数接口int cal_score(int score[], int judge_type[], int n)view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<iostream.h>4. #include<conio.h>5. #define N 56.7. i nt cal_score(int score[], int judge_type[], int n)8.9. {10. int expert=0;11. int dazhong=0;12. int zongfen=0;13. int i;14. int number=0;15.16. for(i=0;i<N;i++)17. {18. if(judge_type[i]==1)19. {20. expert=expert+score[i];21. number++;22. }23. else dazhong=dazhong+score[i];24. }25. if(number==N)26. {27. zongfen=(int)(expert/N);28. }29. else30.31. {32. expert=(int)(expert/number);33. dazhong=(int)(dazhong/(N-number));34. zongfen=int(0.6*expert+0.4*dazhong);35.36. }37. return zongfen;38.39. }40. int main()41. {42. int score[N];43. int judge_type[N];44. int numberlast=0;45. int i;46. printf("please input the %d score:\n",N);47. for(i=0;i<N;i++)48. scanf("%d",&score[i]);49. printf("please input the level(1:expert,2:dazhong)\n");50. for(i=0;i<N;i++)51. scanf("%d",&judge_type[i]);52. numberlast=cal_score(score,judge_type,N);53. printf("the last score is %d\n",numberlast);54. return 0;55. }运行结果分析:please input the 5 score:90 80 87 89 91please input the level(1:expert,2:dazhong)1 2 1 1 1the last score is 852、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
同学都陆续到华为参加了机试,题目整体难度不大,基本上都是考字符串相关的题目。
这里就分享一套2012年华为南京机试C++或者C的编程题目。
2012年华为南京机试第一题整数化成字符串给定一个整数(有可能是负数),将整数变成字符串。
函数已经声明好类似void change(int number, char s[])的形式。
可以自己写用例测试。
2012年华为南京机试第二题单链表逆序给定一个已经定义好的单链表,将单链表中的数字逆序。
输入为head指针,返回的也是一个head指针。
函数声明为void sor(Node **head)的形式。
2012年华为南京机试第三题字符串最大回文子串给定一个字符串,寻找它的一个最大子串,该子串是回文。
例如给定用例字符串”gabcdcbaef”,那么最大回文字串是”abcdcba”。
函数声明为void huiwen(char input[], intlen, char output[])。
一天几个考场的题目有相同的也有不同的,基本上难度都不大。
要求做前两题就可以了,有能力的可以做第三题并且计入总分。
有同学做完当场就看到是100分,也有0分的,至于怎么计分的不太清楚。
希望七叶草提供的2012年华为南京机试编程题对你有帮助!武汉题目:有一个数组a[N]如a[10]={0,1,2,3,4,5,6,7,8,9}每隔两个数删除一个数,如0,1,2(删除),3,4,5(删除),6,7,8(删除),9,到数组尾部回到数组头部继续删除,要求编写一个函数实现实现上述操作,返回最后一个数的数组下标。
函数接口:intgetLast(intiLen)参数:数组初始元素个数iLen01 #include <stdio.h>02 #include <stdlib.h>0304 typedef struct node *List;05 typedef struct node *PNode;0607 typedef struct node08 {09 int data;10 struct node *next;11 }Node;1213 int getLast(int iLen)14 {15 int i;16 List L;17 PNodetempNode,current;18 L = (List)malloc(sizeof(Node));19 L->next = NULL;20 current = L;21 for (i=0; i<iLen; i++)22 {23 tempNode = (PNode)malloc(sizeof(Node));24 tempNode->data = i;25 current->next = tempNode;26 current = tempNode;27 }28 current->next = L->next;29 current = L;30 while (iLen> 1)31 {32 current = current->next->next;33 tempNode = current->next;34 current->next = tempNode->next;35 printf("%d\n",tempNode->data);36 free(tempNode);37 iLen--;38 }39 return current->data;40 }4142 int main()43 {44 printf("last of 20 is %d",getLast(20));45 return 0;46 }编程题(共2题,第一题40分,第二题60分,共100分。
华为南京地区校园招聘软件类上机考试说明同学您好!欢迎您应聘华为公司。
软件研发类岗位(软件研发、云计算、操作系统开发、数据库开发)需要提前进行上机考试。
现将上机考试做如下说明。
一、题目类别本次上机考试题目设置C/C++、Java两个类别,根据个人情况选作一个类别。
二、题目数量每个考生有三道题,第一二道题必答,第三道题为附加题可以选作,附加题做出,成绩会计入总分。
三、考试时间安排1、简历筛选后,从9月17日开始分批安排上机考试2、每个考生上机考试时间为2小时一、上机考试步骤1、打开IE输入服务器的IP地址或者直接打开收藏夹中已经收藏好的地址;2、输入姓名和手机号,选择考试语言,提交登录:3、登录后会进入试题说明页面,考试阅读完试题要求后,在页面下方点击下载试题框架并解压到D盘。
如果是C/C++则用VC打开工程进行编程,只在func.cpp文件中进行函数编写,函数名已经定义好;如果是Java则用Eclips打开Java工程进行编程,只在SWTest.java文件中进行函数编写,函数名已经定义好。
注意,考生不要进行任何IO输入输出的处理(题目说明中已经有写了),否则会得0分。
4、编完代码并编译和调试通过后,点击试题页面下方的按钮,在弹出的窗口中,如果是C/C++则将test.exe和func.cpp拷贝到一个名为test的目录中然后打包该目录上传,如果是Java则将工程仍然打包为SWTest.rar一次性上传(这个过程非常重要,否则会因无法自动判卷而得0分)。
上传之后页面会显示“提交成功”,然后关闭所有IE窗口并清空客户机中您所创建的所有内容后结束考试离开考场。
二、如何阅卷1、考生提交试卷后,我们在服务器后台执行系统阅卷程序,进行自动判卷,不进行人工阅卷。
2、系统设置了多个测试用例,根据用例执行的情况判断考生所上机考试的分数。
三、样题编写一个函数,统计出具有n个元素的一维数组中大于等于所有元素平均值的元素的个数并返回。
2012最新最全华为校园招聘软件研发笔试题(2)m=p- //printf( %5d ,m); output_array[j++]=m; s=p; q- next=p- next; p=p- next; free(s); s=NULL; } m=p- // printf( %5d\n ,m); output_array[j]=p- k=j; for(j=0 ; j j++) { printf( %5d ,output_array[j]); } }int main() { int input_array[]={3,1,2,4}; int len=4; int m=7; int output_array[4]; array_iterate(len, input_array, m); }8、简单四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注:1、表达式只含+, -, *, / 四则运算符,不含括号2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法用整数除法,即仅保留除法运算结果的整数部分。
比如8/3=2。
输入表达式保证无0作为除数情况发生5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况要求实现函数:int calculate(int len,char *expStr) 【输入】int len: 字符串长度; char *expStr: 表达式字符串; 【输出】无【返回】计算结果示例1) 输入:char *expStr = 1+4*5-8/3 函数返回:192) 输入:char *expStr = 8/3*3 函数返回:6#include #include using namespace std;int calculate(int len,char *expStr) { struct { char opdata[200];int top; }opstack; //定义操作符栈opstack.top = -1; int i=0;//遍历字符串的下标int t=0;//当前后缀表达式的长度char ch = expStr[i]; while (ch!= \0 ){ switch (ch) { case + : case - : while (opstack.top != -1) { expStr[t] = opstack.opdata[opstack.top]; opstack.top--; t++; } opstack.top++; opstack.opdata[opstack.top] = ch; break; case * : case / : while (opstack.top != -1 (opstack.opdata[opstack.top] == * || opstack.opdata[opstack.top] == / ) ) { expStr[t] = opstack.opdata[opstack.top]; opstack.top--; t++; } opstack.top++; opstack.opdata[opstack.top] = ch; break; default: expStr[t] = ch; t++; break; } i++; ch = expStr[i]; } while (opstack.top != -1)//将栈中所有的剩余的运算符出栈{ expStr[t] = opstack.opdata[opstack.top]; opstack.top--; t++; } expStr[t]= \0 struct { int numeric[200]; int top; }data; data.top = -1; i=0; ch = expStr[i]; while (ch!= \0 ) { if (ch = 0 ch = 9 ){ data.top++; data.numeric[data.top] = ch- 0 } else if( + == ch) { int tmp = data.numeric[data.top-1] + data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; }else if( - == ch) { int tmp = data.numeric[data.top-1] - data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; } else if( * == ch) { int tmp = data.numeric[data.top-1] * data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; } else if( / == ch) { if(data.numeric[data.top] == 0) { printf( cannot be zero of the divide\n exit(1); } int tmp = data.numeric[data.top-1] / data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; } i++; ch = expStr[i]; } return data.numeric[data.top]; }void main() { char expStr[] = 9/3*5 printf( %s\n ,expStr); int result = calculate(strlen(expStr),expStr); printf( %d\n ,result); }9、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。
2012最新最全华为校园招聘软件研发笔试题(3)output[med-i]=input[n-1-k];output[med+i]=input[n-2-k]; k=k+2; } } else { for(i=0;iint main() { int a[6]={3,6,1,9,7,8}; int b[6]={0}; for(int i=0;i i++) printf( %2d ,a[i]); printf( \n sort(a,6,b); return 0; }11、操作系统任务调度问题。
操作系统任务分为系统任务和用户任务两种。
其中,系统任务的优先级50,用户任务的优先级= 50且= 255。
优先级大于255的为非法任务,应予以剔除。
现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。
函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到system_task[] 数组和user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。
例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}函数接口void scheduler(int task[], int n, int system_task[], int user_task[]) #include #include #include #includevoid scheduler1(int task[], int n, int system_task[], int user_task[]) { int i; int j=0; int *p,*pp,*p_user,*pp_user; int index=0; int count,count2; int min=0; int k=0; p=(int*)malloc(sizeof(int)*n); for(i=0;ipp=(int*)malloc(sizeof(int)*n); for(i=0;ipp[count]=-1; for(i=0;ifor(i=0;iStrReplace(s,s1,s2); printf( %s\n ,s); }void StrReplace(char* strSrc, char* strFind, char* min=user_task[0]; for(j=1;jpp_user[count2]=-1; for(i=0;iint main() { int task[9]={0, 30, 155, 1, 80, 300,170, 40, 99}; int system_task[9]={0}; int user_task[9]={0}; scheduler1(task,9,system_task,user_task); return 0; }13、输入一个字符串,用指针求出字符串的长度。
2011年华为软件校园招聘编程测验1、请上机编写程序,按题目要求提交文件。
[详见考试说明,点击进入考试说明]3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。
两者相同则得分,不同则不得分。
4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目1,判断电话号码是否合法://要注意情况包含,有可能会同时出现几种不好的情况,要按照顺序输出错误。
不能同时输出好几种错误,应该是这样包含:先判断长度是否符合,再判断是否以86打头,再判断有无其他字符int fun(char num[]){ char *p=num;int n=strlen(num);if(n==13){if(*p=='8'&&*(p+1)=='6')while(*p!='\0'){if(*p>='0'&&*p<='9')p++;elsereturn 2;if(*p=='\0')return 0;}else return 3;}elsereturn 1;}int main(){char num[]="87139a3887671";int k=fun(num);cout<<k<<endl;return 0;}1. 数组比较(20分)•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。
传说这是一道华为的面试题。
/*******************************************************************文件名: MinDifference(A VG).cpp问题描述: 有两个数组a、b,大小都为n,数组元素的值任意,无序;通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小,最后输出两个数组和数组元素和的差值解决思路:采用动态规划思想。
先求出一个规划目标的模糊值A VG,表示“完美”的a 与b的情况:a的元素和sa与b的元素和sb相等,并都等于AVG。
然后重置a与b:交换a与b中的元素,另a中存有最小的n个元素(此时sa必然大于A VG)。
b 中存有最大的n个元素(此时sb必然大于A VG);开始进行“完美逼近”规划:在一次a[k]与b[0...n-1]的循环中进行交换,使得此时的sa逼近A VG(此时的sb也在逼近A VG)。
在此过程中,如果sa与A VG相等,这就产生了“完美”数组a与b,保证sa与sb的差值为0。
如果到a[n-1] 时sa与A VG不等,不过此时的数组a和b已经能保证sa与sb的差值最小了正确性证明:(用反证法易证之)时间复杂度分析:O(n^2)关键步骤:Step 0:合并数组a和b到数组c,并对c按升序排序;Step 1:求出数组c元素的和,除以2,其值为A VG;Step 2:将数组c里前n个数设置为数组a,后n个数设置为数组b,并分别求出a元素与b元素的和,放入sa和sb;Step 3:设置整型计数器i = 0;Step 4:a[i]与b[n-i-1]对换,并计算此时的sa与sb;//(试探)Step 5:如果sa大于A VG,a[i]与b[n-i-1]并重新算计sa与sb;//(回溯)Step 6:否则(sa小于A VG时)分别按升序排序a和b;Step 7:i++;Step 8:如果i < n,执行Step 4;Step 9:一次“逼近”过程结束;开发平台: Win Xp SP2编译环境: CL.exe 8.0 (in Visual Studio 2005 SDK)作者: 88250完成日期: 2006-11-26 版本: 2.0修改之处:1. 修正了算法设计思想的描述:将贪心+回溯改为动态规划2. 修正了存在重复比较数组a和b元素的问题,大大提高了处理效率3. 可以从负值到正值地设定了数组元素的随机范围Blog: E-mail: DL88250@QQ: 845765 or 316281008*******************************************************************/#i nclude <ctime>#i nclude <vector>#i nclude <algorithm> // 使用快速排序#i nclude <iterator>#i nclude <iostream>#define TEST 0 // 测试开关using namespace std;// 全局数组描述:const int num_max = 100; // 最大数组容量const int range_min = -10; // 给定数组元素的最小值const int range_max = 10; // 给定数组元素的最大值vector<int> a; // 数组avector<int> b; // 数组bvector<int> c; // 数组cint average = 0; // 即算法描述中的A VGint sa = 0, sb = 0; // 分别保存数组a和b元素的和int sum_difference = 0; // 存放数组a和b的差值的绝对值// 全局函数描述:// 对数组v进行随机初始化void init(vector<int> &v);// 显示数组vvoid display(const vector<int> &v);// 对数组v的元素求和放到sum里void sum(const vector<int> &v, int &sum);// 合并数组v到c中void merge(const vector<int> &v, vector<int> &c);// 设置数组a的元素void set_a(void);// 设置数组b的元素void set_b(void);// 交换a与b的值void exchange(int &a, int &b);// 一次贪心的过程,产生符合条件的数组a和b// 返回这次贪心能产生的差值int kernel(int &k);// 输出当前的数组a和b与相应和及差值void outCurrent(void);// 主程序入口int main(int argc, char* argv[]){// 设置随机种子srand((unsigned)time(NULL));init(a);init(b);sum(a, sa);sum(b, sb);outCurrent();if (0 == sum_difference){// 就是最优解,不需要处理了,收工~ :-pcout << endl << endl << "Okey! " << endl;outCurrent();return 0;}// Step 0merge(a, c); merge(b, c);sort(c.begin(), c.end());#if TEST // 测试合并结果cout << "c:"; display(c);#endifvector<int> cpy_a;vector<int> cpy_b;int tmp_sum_diff = sum_difference, sum_difference = 0;cpy_a.assign(a.begin(), a.end());cpy_b.assign(b.begin(), b.end());// Step 1average = (sa + sb) / 2;// Step 2set_a(); sum(a, sa);set_b(); sum(b, sb);// 进行A VG“逼近”for (int k = 0; k < num_max; k++){sum_difference = kernel(k);if (tmp_sum_diff > sum_difference){cpy_a.clear(); cpy_b.clear();tmp_sum_diff = sum_difference;cpy_a.assign(a.begin(), a.end());cpy_b.assign(b.begin(), b.end());}if (0 == tmp_sum_diff){// 找到“完美”解,直接结束过程k = num_max;}}if (tmp_sum_diff < sum_difference){a.clear();b.clear();a.assign(cpy_a.begin(), cpy_a.end());b.assign(cpy_b.begin(), cpy_b.end());sum(a, sa); sum(b, sb);sum_difference = tmp_sum_diff;}// 最优结果输出cout << endl << endl << "Okey! " << endl;outCurrent();cout << "The runtime of this program: "<< (float)clock() / CLK_TCK << 's' << endl;return 0;}int kernel(int &k){for (int i = 0; i < num_max; i++){#if TEST // 测试当前数组a和b的值及相应和的情况cout << endl << "TEST:" << endl;outCurrent();cout << "END TEST" << endl;#endif// Step 4(试探)exchange(a[k], b[num_max-i-1]);sum(a, sa); sum(b, sb);if (sa > average) // Step 5(回溯){exchange(a[k], b[num_max-i-1]);sum(a, sa); sum(b, sb);}else if (sa < average) // Step 6{sort(a.begin(), a.end());sort(b.begin(), b.end());break;}else{// 发现“完美”解break;}}return sum_difference = abs(sa - sb);}void outCurrent(void){cout << "a:"; display(a);cout << "b:"; display(b);cout << "Sum a: " << sa << endl;cout << "Sum b: " << sb << endl;sum_difference = abs(sa - sb);cout << "The difference of a'sum and b'sum: "<< sum_difference << endl;return;}void init(vector<int> &v){for (int i = 0; i < num_max; i++){v.push_back((((double)rand() /(double)RAND_MAX) * range_max + range_min));}return;}void display(const vector<int> &v){for (vector<int>::const_iteratori = v.begin();i != v.end();i++){cout << ' ' << *i;}cout << endl;return;}void sum(const vector<int> &v, int &sum){sum = 0;for (vector<int>::const_iteratori = v.begin();i != v.end();i++){sum += *i;}return;}void merge(const vector<int> &v, vector<int> &c) {for (vector<int>::const_iteratori = v.begin();i != v.end();i++){c.push_back(*i);}return;}void set_a(void){a.clear();for (int i = 0; i < num_max; i++){a.push_back(c[i]);}return;}void set_b(void){b.clear();for (int i = num_max; i < 2 * num_max; i++){b.push_back(c[i]);}return;}void exchange(int &a, int &b){int tmp = a;a = b;b = tmp;return;}本文来自CSDN博客,转载请标明出处:/DL88250/archive/2006/12/02/1426601.aspx。
华为笔试来源:马彬龙好孩子的日志1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?答:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
4、语句for( ;1 ;)有什么问题?它是什么意思?答:无限循环,和while(1)相同。
5、do……while和while……do有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环。
6、请写出下列代码的输出内容#i nclude<stdio.h>main(){int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d);return 0;}答:10,12,120一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。
()2、int (*ptr) (),则ptr是一维数组的名字。
()3、指针在任何情况下都可进行>, <, >=, <=, = =运算。
华为2012年校园招聘法务部笔试、面试题(根据记忆整理)(小编推荐)第一篇:华为2012年校园招聘法务部笔试、面试题(根据记忆整理)(小编推荐)笔试共5道选择题,5道判断题,2道案例式简答,1道汉译英,1道英译汉选择题和判断题多是合同法和国际经济法印象不深了,大概是合同解除的条件,无效合同,CIF的买卖方义务,质权生效条件,就差不多这种类型,具体不记得了,比较常规的知识点。
简答题第一题我忘了,囧第二题是:如果你是公司律师,产品购买方发来律师函说产品有质量问题,律师该怎么处理翻译题都是法律方面的内容,但不偏,至少要知道一下合同用语吧汉译英就考到翻译大意是“合同双方约定多种语言的合同,如何推定合同中的用词”这么一段话。
英译汉比较简单,甲方应保障一方哪些权利,要知道知情权等的英文,也不难面试比较灵活,会先中文自我介绍,然后他会根据你的简历提问,多是专业方面的问题,比较具体,对我的提问是合同法居多,格式条款啊,合同解除免责事由是,禁止约定的内容啊等等,还问了劳务派遣的风险规避,毕竟他们公司劳务派遣的也多嘛。
也会问问你的人生方面的,泛泛而谈。
最后会英文考察,会要你英文自我介绍,这个也比较灵活,他随便问的。
差不多这些吧,这是一面的流程,祝你好运第二篇:华为校园招聘笔试面试题(1)什么是预编译,何时需要预编译:答案:1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
(2)char * const p char const * p const char *p 上述三个有什么区别?答案:char * const p;//常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p; //和char const *p(3)char str1[] = “abc”;char str2[] = “abc”;const char str3[] = “abc”;const char str4[] = “abc”;const char *str5 = “abc”;const char *str6 = “abc”;char *str7 = “abc”;char *str8 = “abc”;cout < <(str1 == str2)< < endl;cout < <(str3 == str4)< < endl;cout < <(str5 == str6)< < endl;cout < <(str7 == str8)< < endl;结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。
华为2012第一次笔试题目总结:单选20,多选10,改错3,编程2有数据结构、网络、操作系统、数据库一、单项选择题(4选1)1.如果有N个节点用二叉树结构来存储,那么二叉树的最小深度是:解析:深度为k的二叉树,最多有2^k-1个节点,这时的二叉树成为满二叉树。
Log2(N+1)2.形结构的一种重要运算。
若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则后序序列是:FEGHDCB3.下列算法的功能是:/*L是无头节点单链表*/LinkList Demo(LinkList L){ListNode *Q,*P;If(L&&L->next){Q=L;L=L->next;P=L;While(p->next)P=p->next;p->next=Q;Q->next=NULL;}return L;}解析:将单链表转变为循环链表4、循环单向链表指:最后一个节点的指针总是指向链表头。
5、折半查找算法的算法复杂度:O(log2N)6、void example(char acWelcome[]){Printf(“%d”,sizeof(acWelcome));return;}Void main(){Char acWelcome[]=”Welcome to Huawei Test”;Example(acWelcome);return;}的输出是——A 4B 5C 22D 23解析:237、设有如下定义:Unsigned long pulArray[]={6,7,8,9,10};Unsigned long *pulPtr;则下列程序段的输出结果为——pulPtr=pulArray;*(pulPtr+2)+=2;printf(“%d,%d\n”,*pulPtr,*(pulPtr+2));6,10pulPtr+2只是一个临时的指针相当于int *p,*q;q = PulPtr + 2;return pulPtr;而ptr++相当于ptr = ptr +1;return ptr;7,8指针的问题!!!8、#define M(x,y,z) x*y+zvoid main(){int a=1,b=2,c=3;cout<<M(a+b,b+c,c+a);}A 12B 13C 19D 89、如下:int func(int a){int b;switch(a){case 1:b=100;case 2:b=200;case 3:b=250;default:b=0; }return b;}问f(1)等于多少?010、给出以下定义:Char acX[]=”abcdefg”;Char acX[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’}; 则正确的叙述为()A、数组acX和数组acY等价B、数组acX和数组acY的长度相同C、数组acX的长度大于数组acY的长度D、数组acX的长度小于数组acY的长度11、有下面一段代码:Char szMsisdn[MAX_LEN_MSISDN-1];szMsisdn[sizeof(szMsidn)]=’\0’;则对执行以上代码后,正确的叙述为:程序执行后有问题,内存被踩。
2012华为校园招聘机考试题总结(厦门大学)1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>int delete_sub_str(const char *str,const char *sub_str,char *result){assert(str != NULL && sub_str != NULL);const char *p,*q;char *t,*temp;p = str;q = sub_str;t = result;int n,count = 0;n = strlen(q);tmep = (char *)malloc(n+1);memset(temp,0x00,n+1);while(*p){memcpy(temp,p,n);if(strcmp(temp,q) == 0 ){count++;memset(temp;0x00,n+1);p = p + n;}else{*t = *p;p++;t++;memset(temp,0x00,n+1);}}free(temp);return count;}int main(){char s[100] = {‘\0’};int num = delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);printf(“The number of sub_str is %d\r\n”,num);printf(“The result string is %s\r\n”,s);}2、约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
2012届华为校园招聘上机考试题目(9月6日下午1点场)分类:华为准备2011-09-08 15:10 281人阅读评论(0) 收藏举报在网上看到华为在有的地方已经开始机试了,于是决定自己先编着试试。
下面是题目和自己写的代码。
1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。
打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。
如果没有大众评委,则总分= 专家评委平均分,总分取整。
函数最终返回选手得分。
函数接口int cal_score(int score[], int judge_type[], int n)view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<iostream.h>4. #include<conio.h>5. #define N 56.7. i nt cal_score(int score[], int judge_type[], int n)8.9. {10. int expert=0;11. int dazhong=0;12. int zongfen=0;13. int i;14. int number=0;15.16. for(i=0;i<N;i++)17. {18. if(judge_type[i]==1)19. {20. expert=expert+score[i];21. number++;22. }23. else dazhong=dazhong+score[i];24. }25. if(number==N)26. {27. zongfen=(int)(expert/N);28. }29. else30.31. {32. expert=(int)(expert/number);33. dazhong=(int)(dazhong/(N-number));34. zongfen=int(0.6*expert+0.4*dazhong);35.36. }37. return zongfen;38.39. }40. int main()41. {42. int score[N];43. int judge_type[N];44. int numberlast=0;45. int i;46. printf("please input the %d score:\n",N);47. for(i=0;i<N;i++)48. scanf("%d",&score[i]);49. printf("please input the level(1:expert,2:dazhong)\n");50. for(i=0;i<N;i++)51. scanf("%d",&judge_type[i]);52. numberlast=cal_score(score,judge_type,N);53. printf("the last score is %d\n",numberlast);54. return 0;55. }运行结果分析:please input the 5 score:90 80 87 89 91please input the level(1:expert,2:dazhong)1 2 1 1 1the last score is 852、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。