最全华为上机试题及部分答案.docx
- 文档编号:26592540
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:22
- 大小:111.65KB
最全华为上机试题及部分答案.docx
《最全华为上机试题及部分答案.docx》由会员分享,可在线阅读,更多相关《最全华为上机试题及部分答案.docx(22页珍藏版)》请在冰豆网上搜索。
最全华为上机试题及部分答案
.
重庆_软研_sT(83656621)16:
31:
33
数据结构的题
写函数,
VC6
约瑟夫环是一个数学的应用问题:
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include
#include
typedefstructNode
{
intnum;
structNode*next;
}LinkList;
LinkList*creat(intn)
{
LinkList*p,*q,*head;
inti=1;
p=(LinkList*)malloc(sizeof(LinkList));
p->num=i;
head=p;
for(i=2;i<=n;i++)
{
q=(LinkList*)malloc(sizeof(LinkList));
q->num=i;
p->next=q;
p=q;
}
p->next=head;/*使链表尾指向链表头形成循环链表*/
returnhead;
}
voidfun(LinkList*L,intm)
{
inti;
LinkList*p,*s,*q;
p=L;
printf("出列顺序为:
");
while(p->next!
=p)
{
for(i=1;i {q=p; p=p->next; } printf("%5d",p->num); s=p; q->next=p->next; p=p->next; free(s); } printf("%5d\n",p->num); } intmain() { LinkList*L; intn,m; n=9; m=5; L=creat(n); fun(L,m); return0; } #include #include #include #include #defineLENGTH13 intverifyMsisdn(char*inMsisdn) { char*pchar=NULL; assert(inMsisdn! =NULL); if(LENGTH==strlen(inMsisdn)) { if(('8'==*inMsisdn)&&(*(inMsisdn+1)=='6')) { while(*inMsisdn! ='\0') { if((*inMsisdn>='0')&&(*inMsisdn<='9')) inMsisdn++; else return2; } } else return3; return0; } else return1; } intmain() { char*pchar=NULL; unsignedcharichar=0; intresult; switch(ichar) { case0: pchar="8612345363789";break; case1: pchar="861111111111111";break; case2: pchar="86s1234536366";break; default: break; } result=verifyMsisdn(pchar); printf("resultis%d\n",result); } 华赛面试: 首先自我介绍,然后将自己的项目,然后拿出笔试题来让你做。 1. charm[]={"I","LOVE","CHINA"};//这句不对吧, char*p=m;printf("%s",*p++);printf("%c",**p); intmain() { doublex=1; doubley; y=x+3/2; printf("%f\n",y); return0; }//////2.0 2.x=0x? ? 求~x! x3.4.找错unsignedintf(){unsignedchara=123;unsignedcharres;while(a-->=0){res+=a;}returnres;}5.structnode{intdata;node*pre;node*next;}结构体数组转双向循环链表群面: 12个人分两组,介绍自己,全部介绍完,抓几个人评价别的某个人对10个按重要性排序公司前景,个人兴趣,薪酬,工作地点,父母期望,解决户口,就业政策。 10分钟讨论组长汇报排序结果谁贡献最多,排序 2011年华为软件校园招聘编程测验 类别: 软件C/C++语言 编程题(共3题,第一题20分,第二题30分,第三题50分,共100分) 注意: 1、请上机编写程序,按题目要求提交文件。 [详见考试说明,点击进入考试说明] 2、本试题采用自动执行测试用例进行评分,测试用例不对考生公开 3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。 两者相同则得分,不同则不得分。 4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况 5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误 6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分 7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目 1. 数组比较(20分) •问题描述: 比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。 请编程实现上述比较,并返回比较中发现的不相等元素的个数 比如: 数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0 数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3 •要求实现函数: int array_compare(int len1, int array1[], int len2, int array2[]) 【输入】int len1: 输入被比较数组1的元素个数; int array1[]: 输入被比较数组1; int len2: 输入被比较数组2的元素个数; int array2[]: 输入被比较数组2; 【输出】无 【返回】不相等元素的个数,类型为int •示例 1)输入: int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回: 0 2)输入: int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回: 3 #include #include #include intarray_compare(intlen1,intarray1[],intlen2,intarray2[]) { intcount=0; for(;len1>=0&&len2>=0;len1--,len2--) { if(array1[len1-1]==array2[len2-1]) { count++; } } returncount; } intmain() { intresult=0; intarray1[]={1,3,5}; intlen1=3; intarray2[]={77,12,1,3,5}; intlen2=5; result=array_compare(len1,array1,len2,array2);///result=array_compare(len1,array1[],len2,array2[]);不能这样 //函数形参中永远只是传得首地址,不能传数组切记切记! ! ! ! ! ! printf("theresultis%d",result); } 2. 约瑟夫问题 •问题描述: 输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。 从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。 如果计数到达数列尾段,则返回数列首位置继续计数。 请编程实现上述计数过程,同时输出数值出列的顺序 比如: 输入的随机数列为: 3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置) 第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数 第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数 第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数 最后一轮计数出列数字为4,计数过程完成。 输出数值出列顺序为: 2,3,1,4。 •要求实现函数: void array_iterate(int len, int input_array[], int m, int output_array[]) 【输入】int len: 输入数列的长度; int intput_array[]: 输入的初始数列 int m: 初始计数值 【输出】int output_array[]: 输出的数值出列顺序 【返回】无 •示例 输入: int input_array[] = {3,1,2,4},int len = 4, m=7 输出: output_array[] = {2,3,1,4} ////////////循环链表实现////////////////////// #include #include #include typedefstructNode { intnum; structnode*next; }node; node*creat(intlen,intinput_array[]) { node*h,*s,*p; inti; h=(node*)malloc(sizeof(node)); h->num=input_array[0]; p=h; for(i=1;i { s=(node*)malloc(sizeof(node)); s->num=input_array[i]; p->next=s; p=s; } p->next=h; return(h); } voidarray_iterate(intlen,intinput_array[],intm) { node*q,*p,*s; inti=0,j=0,k; intoutput_array[4]; p=creat(len,input_array); while(p->next! =p) { for(i=1;i { q=p; p=p->next; } m=p->num; printf("%5d",m); output_array[j++]=m; s=p; q->next=p->next; p=p->next; free(s); s=NULL; } m=p->num; printf("%5d\n",m); output_array[j]=p->num; k=j; for(j=0;j<=k;j++) { printf("%5d",output_array[j]); } } intmain() { intinput_array[]={3,1,2,4}; intlen=4; intm=7; intoutput_array[4]; array_iterate(len,input_array,m,output_array); } 3. 简单四则运算 •问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 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” 函数返回: 19 2)输入: char *expStr = “8/3*3” 函数返回: 6 第六题: 类似昨天Sara说的最后一题: 给你一个数组a[],数组长度len 以及一个整数m 从数组中第一个数字数起 找到第m个数字 输出a[m] 然后再将a[m]赋值给m,从数组的下一个元素数起,找到第m个元素输出,以此进行直到数组中的元素全部输出 第五题: 一副牌中发五张扑克牌给你: 让你判断数字的组成: 有以下几种情况: 1: 四条: 即四张一样数值的牌(牌均不论花色) 2: 三条带一对 3: 三条带两张不相同数值的牌 4: 两对 5: 顺子 包括 10,J,Q,K,A 6: 什么都不是 7: 只有一对 第一题: 比较一个数组的元素 是否为回文数组 #include #include inthuiwen(charstr[]) { inti,len,k=1; len=strlen(str); for(i=0;i { if(str[i]! =str[len-i-1]) { k=1; break; } } if(k==0) printf("%s不是一个回文数\n",str); else printf("%s是一个回文数\n",str); } voidmain() { charstr[100]={0}; inti; intlen; printf("Inputastring: ");/*提示输入Inputastring: */ scanf("%s",str);/*scan()函数输入一个字符串: */ huiwen(str); } 第二题: 求两个数组的和差 就是去掉两个数组中相同的元素 然后将两个数组中的元素存放在一个新的数组中 切数组A中元素要在B数组元素之前 第三题: 比较汗 求简单的四则运算 参与运算的数字只有0--9 逆序单链表 第一题【20分】: 鉴定回文数组。 第二题【30分】: 求两个整型数组的异集,即A+B-(A与B的交集)。 第三题【50分】: 判定德州扑克的牌型。 给5张牌,返回它的牌型,4个的,3个+对子,顺子,3个+2个单张,2对,1对,其他。 上午是输入一个数组,然后找出哪个比平均值大上午是输入一个数组,然后找出哪个比平均值大 1.手机号码合法性判断(20分) 问题描述: 我国大陆运营商的手机号码标准格式为: 国家码+手机号码,例如: 8613912345678。 特点如下: 1、长度13位; 2、以86的国家码打头; 3、手机号码的每一位都是数字。 请实现手机号码合法性判断的函数要求: 1)如果手机号码合法,返回0; 2)如果手机号码长度不合法,返回1 3)如果手机号码中包含非数字的字符,返回2; 4)如果手机号码不是以86打头的,返回3; 【注】除成功的情况外,以上其他合法性判断的优先级依次降低。 也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。 要求实现函数: intsintverifyMsisdn(char*inMsisdn) 【输入】char*inMsisdn,表示输入的手机号码字符串。 【输出】无 【返回】判断的结果,类型为int。 示例 输入: inMsisdn=“869123456789“ 输出: 无 返回: 1 输入: inMsisdn=“88139123456789“ 输出: 无 返回: 3 输入: inMsisdn=“86139123456789“ 输出: 无 返回: 0 2.将一个字符串的元音字母复制到另一个字符串,并排序(30分) 问题描述: 有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。 说明: 1、元音字母是a,e,i,o,u,A,E,I,O,U。 2、筛选出来的元音字母,不需要剔重; 最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。 要求实现函数: voidsortVowel(char*input,char*output); 【输入】char*input,表示输入的字符串 【输出】char*output,排好序之后的元音字符串。 【返回】无 示例 输入: char*input=“Abort! MayBeSomeErrorsInOutSystem.“ 输出: char*output=“aeeeooAEIO“ 3.身份证号码合法性判断 问题描述: 我国公民的身份证号码特点如下: 1、长度为18位; 2、第1~17位只能为数字; 3、第18位可以是数字或者小写英文字母x。 4、身份证号码的第7~14位表示持有人生日的年、月、日信息。 例如: 511002198808080111或511002198********x。 请实现身份证号码合法性判断的函数。 除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。 年份大于等于1900年,小于等于2100年。 需要考虑闰年、大小月的情况。 所谓闰年,能被4整除且不能被100整除或能被400整除的年份,闰年的2月份为29天,非闰年的2月份为28天。 其他情况的合法性校验,考生不用考虑。 函数返回值: 1)如果身份证号合法,返回0; 2)如果身份证号长度不合法,返回1; 3)如果身份证号第1~17位含有非数字的字符,返回2; 4)如果身份证号第18位既不是数字也不是英文小写字母x,返回3; 5)如果身份证号的年信息非法,返回4; 6)如果身份证号的月信息非法,返回5; 7)如果身份证号的日信息非法,返回6(请注意闰年的情况); 【注】除成功的情况外,以上其他合法性判断的优先级依次降低。 也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。 要求实现函数: intverifyIDCard(char*input) 示例 1)输入: ”511002111222”,函数返回值: 1; 2)输入: ”511002abc123456789”,函数返回值: 2; 3)输入: ”51100219880808123a”,函数返回值: 3; 4)输入: ”511002188********4”,函数返回值: 4; 5)输入: ”511002198********4”,函数返回值: 5; 6)输入: ”511002198********4”,函数返回值: 6; 7)输入: ”511002198902291234”,函数返回值: 7; 8)输入: ”511002198********4”,函数返回值: 0; 第一个: 比较两个数组的元素是否相同从后向前比较,直到比较完较短的一个数组为止。 出现不同元素就返回0相同则返回1第二题: 比较一个数组的元素是否为回文数组第三题: 求两个数组的和差就是去掉两个数组中相同的元素然后将两个数组中的元素存放在一个新的数组中切数组A中元素要在B数组元素之前第四题: 比较汗求简单的四则运算 第五题: 一副牌中发五张扑克牌给你: 让你判断数字的组成: 有以下几种情况: 1: 四条: 即四张一样数值的牌(牌均不论花色)2: 三条带一对3: 三条带两张不相同数值的牌4: 两对5: 顺子包括10,J,Q,K,A6: 什么都不是 第六题: 类似昨天Sara说的最后一题: 给你一个数组a[],数组长度len以及一个整数m从数组中第一个数字数起找到第m个数字输出a[m]然后再将a[m]赋值给m,从数组的下一个元素数起,找到第m个元素输出,以此进行直到数组中的元素全部输出 华为上机题: 1)天大: 上午是输入一个数组,然后找出哪个比平均值大 下午是链表的reverse 2)四川大学: 刚考完,都是编程题,不难挺基本的。 数组比较,约瑟夫环,字符串计算 3) 第一题【20分】: 鉴定回文数组。 第二题【30分】: 求两个整型数组的异集,即A+B-(A与B的交集)。 第三题【50分】: 判定德州扑克的牌型。 给5张牌,返回它的牌型,4个的,3个+对子,顺子,3个+2个单张,2对,1对,其他。 算法都不难,关键看细心度啦。 祝各位好运! 4) 昨天去参加了华为的校园招聘上机考试,题目一共三道,都比较简单,不要求算法效率,也不要求对所给数据的合法性作检测,主要还是注重基础知识的考察,和大家分享一下,希望对接下来的同学有所帮助。 1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 上机 试题 部分 答案