ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:28.31KB ,
资源ID:3545039      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3545039.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最全华为上机试题及部分答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最全华为上机试题及部分答案.docx

1、最全华为上机试题及部分答案2011年华为软件校园招聘编程测验1、请上机编写程序,按题目要求提交文件。详见考试说明,点击进入考试说明3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。两者相同则得分,不同则不得分。4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性

2、后,再考虑并实现下一题目(17)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+; else return 2; if(*p=0) return 0; else return 3; else return 1;int main() char

3、 num=87139a3887671; int k=fun(num); coutk=0&j=0;i-,j-) if(arry1i!=arry2j) k+; return k;int main() int num1=1,3,5; int num2=77,21,1,3,5; int k=f(3,num1,5,num2); coutkendl; return 0;2.约瑟夫问题 问题描述:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有

4、数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺比如: 输入的随机数列为: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。 要求实现函数:voidarray_iterate(int

5、len,intinput_array,intm,intoutput_array)【输入】 intlen:输入数列的长度;intintput_array:输入的初始数列intm:初始计数值【输出】 intoutput_array:输出的数值出列顺序 示例输入:intinput_array=3,1,2,4,intlen=4,m=7输出:output_array=2,3,1,4函数如下:void fun(int len,int a1,int len2,int a2) int n=0,i=-1,k=1,m=len2; while(1) for(int j=0;jm;) i=(i+1)%len; /注意

6、这个是%,不要写成/ if(a1i!=0) j+; m=a1i; a2n+=a1i; a1i=0; if(k=len)break; k+; 3.简单四则运算 问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: 1、表达式只含+,-,*,/四则运算符,不含括号2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任

7、何字符,不会出现计算溢出情况 要求实现函数:intcalculate(intlen,char*expStr)【输入】 intlen:字符串长度;char*expStr:表达式字符串;【输出】 无【返回】 计算结果 示例1) 输入:char*expStr=“1+4*5-8/3” 函数返回:192) 输入:char*expStr=“8/3*3” 函数返回:6 简化版的四则运算:没有括号,只有加减乘除四种运算int fun(char a,int len) /字符数组和字符数组的长度 int num20; char str20; int k1=0,k2=0; int data=0; for(int i

8、=0;i=0&ai=9) numk1+=ai-0; if(ai=-|ai=+) strk2+=ai; if(ai=*) numk1-1=numk1-1*(ai+1-0);i+;/遇见*,就运算,结果保存在数组中 if(ai=/) numk1-1=numk1-1/(ai+1-0);i+; int temp=num0; int j=0; /两个数组只剩下数组和加减运算符 while(jk2) /顺序运算 if(strj=-) temp=temp-numj+1; else if(strj=+) temp=temp+numj+1; j+; return temp;int main() har a=3*

9、3+7+4/3; int k=fun(a,9); coutkendl; return 0; 函数实现2:中序表达式转换为后序表达式,使用算法实现int isp(char c) int p; switch(c) case *: case /:p=1;break; case +: case -: p=0;break; return p;char* transf(int len,char a,char b) int k=0; stack s1; for(int i=0;i=0&ai=9)bk+=ai; else if(s1.empty()s1.push(ai); else while(isp(ai)

10、=isp(s1.top() bk+=s1.top();s1.pop(); s1.push(ai); while(s1.empty() bk+=s1.top(); s1.pop(); bk=0; return b;void fun(char c,stack s2) char p1,p2; if(!s2.empty() p1=s2.top();s2.pop(); else pos=false; coutkongzhanendl; if(!s2.empty() p2=s2.top();s2.top(); else pos=false; coutkongzhanendl; if(pos=true) s

11、witch(c) case +:s2.push(p1+p2);break; case -:s2.push(p2-p1);break; case *:s2.push(p1*p2);break; case /:s2.push(p2/p1);break; void eval(char a) stack s2; for(int i=len;ilen;i+) switch(ai) case +: case -: case *: case /:fun(ai,&s2);break; default:s2.push(ai-0);break; int main() char a=1+4*5-8/3; int l

12、en=strlen(a); char b20; char *q=transf(9,a,b); coutqendl; return 0;第五题:一副牌中发五张扑克牌给你:让你判断数字的组成:有以下几种情况:1:四条:即四张一样数值的牌(牌均不论花色) 2:三条带一对3:三条带两张不相同数值的牌 4:两对 5:顺子包括10,J,Q,K,A6:什么都不是 7:只有一对 思路:将数组排序,统计相同的数字的个数,再分情况讨论void sort(int a) int temp; for(int i=0;i5;i+) for(int j=0;jaj) temp=ai;ai=aj;aj=temp;void t

13、est(int a) int *b=new int5; int k=1; for(int i=0;i5;i+) bi=ai; for(int j=0;j4;j+) if(aj=aj+1) k+; if(k=4) if(b1=b3) cout四条endl; else cout三条带一对endl; if(k=3) if(b1!=b2|b2!=b3) cout三条带两个不同的牌endl; else cout两对endl; if(k=2) cout一对endl; if(k=1) if(b4-b0=4&b4-b1=3&b4-b2=2&b4-b3=1) cout顺子endl; else cout什么都不是

14、endl; int main() int a=1,2,4,4,4; test(a); return 0;(19)第二题:求两个数组的和差就是去掉两个数组中相同的元素然后将两个数组中的元素存放在一个新的数组中,按大小顺序排序思路:将数组A和数组B分别进行排序,然后将A与B进行比较,重复的跳过去,不重复的赋给数组C,依次输出。 while(i la & j lb) if(aai bbj) csub = bbj; +sub; +j; else if(aai = bbj) +i; +j; for(; i la; +i) csub = aai; +sub; for(; j next; while(p2)

15、 p3=p2-next; p2-next=p1; p1=p2; p2=p3; head-next=NULL; head=p1; return head;(33)2. 将一个字符串的元音字母复制到另一个字符串,并排序(30分)问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。说明:1、 元音字母是a,e,i,o,u,A,E,I,O,U。 2、 筛选出来的元音字母,不需要剔重;最终输出的字符串,小写元音字母排在前面

16、,大写元音字母排在后面,依次有序。要求实现函数:void sortVowel (char* input, char* output);using namespace std;void fun(char a,char s) /提取元音字母,放入数组 int i=0,n=0; while(ai!=0) if(ai=a|ai=e|ai=i|ai=o|ai=u) sn+=ai; else if (ai=A|ai=E|ai=I|ai=O|ai=U) sn+=ai; i+; char temp; /将数组排序 for(int i=0;in-1;i+) for(int j=0;jsj+1) temp=sj;

17、sj=sj+1;sj+1=temp; int k=0; /定位大写字母的最后位置 while(sk=A&sk=Z) k+; for(int j=0;jn;j+) /输出原字符串 coutsj ; coutendl;char *p=new char20; /将字符串变换位置,输出。char *q=p; for(int i=k;in;i+) *p=si;p+; for(int j=0;jk;j+) *p=sj;p+; *p=0; coutqendl;int main() char str=HaJsdStOoAOeINaPQaWEiAIiO; char s20; fun(str,s); return

18、 0;(32)3. 身份证号码合法性判断我国公民的身份证号码特点如下:1、 长度为18位;2、 第117位只能为数字;3、 第18位可以是数字或者小写英文字母x。4、 身份证号码的第714位表示持有人生日的年、月、日信息。例如:511002 19880808 0111或511002 198*x。请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于1900年,小于等于2100年。需要考虑闰年、大小月的情况。所谓闰年,能被4整除且不能被100整除 或 能被400整除的年份,闰年的2月份为29天,非闰年的2月份为28天。其他情况的合法性校验,考生

19、不用考虑。函数返回值:1) 如果身份证号合法,返回0;2) 如果身份证号长度不合法,返回1;3) 如果身份证号第117位含有非数字的字符,返回2;4) 如果身份证号第18位既不是数字也不是英文小写字母x,返回3;5) 如果身份证号的年信息非法,返回4;6) 如果身份证号的月信息非法,返回5;7) 如果身份证号的日信息非法,返回6(请注意闰年的情况);要求实现函数:int verifyIDCard(char* input)示例1) 输入:”511002 111222”,函数返回值:1;2) 输入:”511002 abc123456789”,函数返回值:2;3) 输入:”511002 198808

20、08123a”,函数返回值:3;4) 输入:”511002 188*4”,函数返回值:4;5) 输入:”511002 198*4”,函数返回值:5;6) 输入:”511002 198*4”,函数返回值:6;7) 输入:”511002 1989 0229 1234”,函数返回值:7;8) 输入:”511002 198*4”,函数返回值:0;int fun(char *str) int year=0,month=0,day=0; if(strlen(str)-1)18) /1 for(int i=0;i=0&stri=0&str17=9)/3 for(int i=6;i1900&year2100)

21、/4 for(int i=10;i0&month=12)/5 for(int i=12;i14;i+) day=day*10+stri-0; if(day=31)/6 if(year%4!=0&month=2&day=28) return 0; else if(year%4=0&month=2&day29) return 0; else if(year%4!=4&month!=2&day31) return 0; else return 6; else return 6; else return 5; else return 4; else return 3; else return 1;in

22、t main() char a=340621198608377817; int k=fun(a); coutkendl; return 0;第二题:比较一个数组的元素 是否为回文数组判断是否是回文数组:bool fun(char a) int n=strlen(a); int i=0,j=n-1; while(ij) if(ai!=aj) return false; i+;j-; return true;(19)第三题:求两个数组的和差:就是去掉两个数组中相同的元素 然后将两个数组中的元素存放在一个新的数组中 且数组A中元素要在B数组元素之前思路:利用循环比较,将相同的数字的标记为0,再赋给数组Cint main() int a=1,3,5,7,9,12,13; int s=1,3,5,6,7,8,9; int len1=sizeof(a)/sizeof(int); int len2=sizeof(s)/sizeof(int); for(int i=0;ilen1;i+) for(int j=0;jlen2;j+) if(ai=sj) ai=0;sj=0; int t30; int k=0,i=0,j=0; while(ilen1) if(ai!=0) tk+=ai; i+; while(jlen2) if(sj!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1