华为上机题汇总111题.doc

上传人:仙人指路1688 文档编号:4123215 上传时间:2023-04-06 格式:DOC 页数:146 大小:451KB
返回 下载 相关 举报
华为上机题汇总111题.doc_第1页
第1页 / 共146页
华为上机题汇总111题.doc_第2页
第2页 / 共146页
华为上机题汇总111题.doc_第3页
第3页 / 共146页
华为上机题汇总111题.doc_第4页
第4页 / 共146页
华为上机题汇总111题.doc_第5页
第5页 / 共146页
点击查看更多>>
资源描述

《华为上机题汇总111题.doc》由会员分享,可在线阅读,更多相关《华为上机题汇总111题.doc(146页珍藏版)》请在三一办公上搜索。

1、注:1.本文代码仅保证在visual studio 2005上运行通过!2.高亮的题目为华为机试第三题左右难度。3.本文的字符串基本运用C+里的string类,很少使用常规字符数组形式。4.freopen()为输入重定向,方便测试,具体用法问度娘。1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数void Stringchang(const char*inpu,char*output)其中input是输入字符串,output是输出字符串#include#include#includeu

2、sing namespace std;void stringchang(const char*,char*);int main() char input100,output100;cin.getline(input,100);stringchang(input,output);coutoutputendl;return 0;void stringchang(const char* input,char* output) int m=strlen(input),n=0;for(int i=0;im;i+)if(isalpha(inputi)if(inputi=z)outputn+=a;else

3、if(inputi=Z)outputn+=A;elseoutputn+=inputi+1;elseoutputn+=inputi;outputn=0;2. 求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字写的很差,懒得改了,不要看吧!#include#includeusing namespace std;int same(int);int main() int num; cinnu

4、m; int m=same(num); coutm0)nn1+=num%10;num/=10; for(int i=0;in1;i+) i1=i;c=0;j1=0;for(int j=0;j=2)return 1;i1+;elsec=0;j=j-j1;j1=0;i1=i;return 0;3. 求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来函数为 void mul(char *input1,int n,char *input2, int m,char *output)其

5、中input1和input2是输入,n是input1的长度,n2是input2的长度。Output是输出#include#include#includeusing namespace std;void mul(char*,int,char*,int,char*);int main() char input1100,input2100,output100; cininput1input2; int n=strlen(input1); int m=strlen(input2); mul(input1,n,input2,m,output); coutoutputendl;return 0;void

6、mul(char* input1,int n,char* input2,int m,char* output)int i1=0,i2=0,p1=n,p2=m,p3=0;for(int i=0;in;i+)i1+=(input1i-0)*pow(10.0,-p1);for(int i=0;i0)outputp3+=ou%10+0;ou/=10;outputp3=0;for(int i=0;ip3/2;i+)temp=outputi;outputi=outputp3-1-i;outputp3-1-i=temp;4.删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#includ

7、e#includeusing namespace std;int deletesub(string &str,const string &sub,int);int main() string str,sub;getline(cin,str);getline(cin,sub);int n=sub.size();int num=deletesub(str,sub,n);coutnumendl;/coutstrendl; 输出删除后的字符串return 0;int deletesub(string &str,const string &sub,int n)int m,flag=0,num=0; wh

8、ile(flag=0) m=str.find(sub);if(m0)return num;else str.erase(m,n); /删除子串 num+; 5.约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#includeusing namespace std;struct nodeint num;node *next;node *creat(int n)node *q,*p,*head=NULL;for(int

9、 i=1;inum=i;if(head=NULL)head=p;elseq-next=p;q=p;p-next=head;return p;int main() int n,k,m;cinnkm;node *l,*q;l=creat(n);q=l;l=l-next;for(int i=1;inext;while(l-next!=l)for(int i=1;inext;coutnum;q-next=l-next;delete l;l=q-next;coutnumendl;delete l;return 0;6. 比较一个数组的元素是否为回文数组#include#includeusing name

10、space std;int main() string str;getline(cin,str);int m=str.size();for(int i=0;im/2;i+)if(stri!=strm-1-i)coutNOendl;return 0;coutYESendl;return 0;7.比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数比如:数组1,3,5和数组77,21,1,3,5按题述要求比较,不相等元素个数为0数组1,3,5和数组77,21,1,3,5,7按题述要求比较

11、,不相等元素个数为3 要求实现函数:intarray_compare(intlen1,intarray1,intlen2,intarray2)【输入】 intlen1:输入被比较数组1的元素个数;intarray1:输入被比较数组1;intlen2:输入被比较数组2的元素个数;intarray2:输入被比较数组2;【输出】 无【返回】 不相等元素的个数,类型为int 示例1) 输入:intarray1=1,3,5,intlen1=3,intarray2=77,21,1,3,5,intlen2=5函数返回:02) 输入:intarray1=1,3,5,intlen1=3,intarray2=77

12、,21,1,3,5,7,intlen2=6函数返回:#include#includeusing namespace std;int array_compare(int,int*,int,int*);int main() int len1,len2;cinlen1;int *array1=new intlen1;for(int i=0;iarray1i;cinlen2;int *array2=new intlen2;for(int i=0;iarray2i;int m=array_compare(len1,array1,len2,array2);coutm=0&j=0) if(array1i!=

13、array2j) num+; i-; j-;return num;8.约瑟夫环变种:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数第

14、二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数最后一轮计数出列数字为4,计数过程完成。输出数值出列顺序为:2,3,1,4。 要求实现函数:voidarray_iterate(intlen,intinput_array,intm,intoutput_array)【输入】 intlen:输入数列的长度;intintput_array:输入的初始数列intm:初始计数值【输出】 intoutput_array:输出的数值出列顺序【返回】 无 示例输入:intinput_array=

15、3,1,2,4,intlen=4,m=7输出:output_array=2,3,1,4#includeusing namespace std;struct nodeint num;node *next;node *creat(int len,int *input_array)node *p,*q,*head=NULL;for(int i=0;inum=input_arrayi;if(head=NULL)head=p;elseq-next=p;q=p;p-next=head;return p;int main() int len,m,n=0;cinlen;int *input_array=new

16、 intlen;for(int i=0;iinput_arrayi;int *output_array=new intlen;cinm;node *l=creat(len,input_array);node *q=l;l=l-next;while(l-next!=l)for(int i=1;inext;m=l-num;output_arrayn+=l-num;q-next=l-next;delete l;l=q-next;output_arrayn=l-num;delete l;for(int i=0;in;i+)coutoutput_arrayi ;coutoutput_arraynendl

17、;delete input_array;delete output_array;return 0;9. 手机号码合法性:l 问题描述:我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:1、 长度13位;2、 以86的国家码打头;3、 手机号码的每一位都是数字。 请实现手机号码合法性判断的函数要求:1) 如果手机号码合法,返回0;2) 如果手机号码长度不合法,返回13) 如果手机号码中包含非数字的字符,返回2;4) 如果手机号码不是以86打头的,返回3;【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返

18、回1即可,不需要再做其他合法性判断。l 要求实现函数:int verifyMsisdn(char* inMsisdn)【输入】 char* inMsisdn,表示输入的手机号码字符串。【输出】 无【返回】 判断的结果,类型为int。l 示例输入: inMsisdn = “869123456789“输出: 无返回: 1输入: inMsisdn = “88139123456789“输出: 无返回: 3输入: inMsisdn = “86139123456789“输出: 无返回: 0#include#include#includeusing namespace std;int verifyMsisd

19、n(string num);int main() string num;getline(cin,num);int m=verifyMsisdn(num);coutmendl;return 0;int verifyMsisdn(string num)int n=num.size();if(n!=13)return 1;for(int i=0;in;i+)if(!isdigit(numi)return 2;if(num0!=8|num1!=6)return 3;return 0;10.简单的四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: 1、表达式只含+,

20、-,*,/, (, ),四则运算符2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况 要求实现函数:intcalculate(intlen,char*expStr)【输入】 intlen:字符串长度;char*expStr:表达式字符串;【输出】 无【返回】 计算结果 示例1) 输入:char*expStr=

21、“1+4*5-8/3”函数返回:192) 输入:char*expStr=“8/3*3”函数返回:6 #include#include#includeusing namespace std;struct nodechar c;node *next;struct node1int a1;node1 *next;int calculate(int,string);int main() int len;string expStr;cinexpStr;len=expStr.size();int m=calculate(len,expStr);coutmendl;return 0;int calculat

22、e(int len,string a)char *b=new charlen+1;node *top=NULL,*q,*p;int n=0;for(int i=0;ic=ai;p-next=top;top=p;else if(ai=+|ai=-)while(top!=NULL)if(top-c!=()bn+=top-c;q=top;top=top-next;delete q;elsebreak;p=new node;p-c=ai;p-next=top;top=p;else if(ai=*|ai=/)while(top!=NULL&(top-c=*|top-c=/)bn+=top-c;q=top

23、;top=top-next;delete q; p=new node;p-c=ai;p-next=top;top=p;else if(ai=)while(top-c!=()bn+=top-c;q=top;top=top-next;delete q;q=top;top=top-next;delete q;while(top!=NULL)bn+=top-c; q=top;top=top-next;delete q;bn=0;coutbendl; node1 *p1,*top1=NULL,*q1; int num1,num2;for(int i=0;ia1=bi-0;p1-next=top1;top

24、1=p1;else q1=top1; top1=top1-next; num1=top1-a1; num2=q1-a1;delete q1;if(bi=+)top1-a1=num1+num2;else if(bi=-)top1-a1=num1-num2;else if(bi=*)top1-a1=num1*num2;elsetop1-a1=num1/num2;int t=top1-a1;delete top1;delete b;return t;11.选秀节目打分,分为专家评委和大众评委,score 数组里面存储每个评委打的分数,judge_type 里存储与 score 数组对应的评委类别,j

25、udge_typei = 1,表示专家评委,judge_typei = 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 *0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。函数接口 int cal_score(int score, int judge_type, int n)#includeusing namespace std;int cal_score(int*,int*,int);int main() int n;cinn;i

26、nt *score=new intn;int *judge_type=new intn;for(int i=0;iscorei;for(int i=0;ijudge_typei;int ave=cal_score(score,judge_type,n);coutaveendl;return 0;int cal_score(int score,int judge_type,int n)int m1_score=0,m2_score=0,m1=0,m2=0,tol;for(int i=0;in;i+)if(judge_typei=1)m1_score+=scorei;m1+;elsem2_scor

27、e+=scorei;m2+;int ave1=m1_score/m1,ave2;if(m2=0)tol=ave1;elseave2=m2_score/m2;tol=ave1*0.6+ave2*0.4;return tol;12.给定一个数组input ,如果数组长度n为奇数,则将数组中最大的元素放到 output 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。 例如:input = 3, 6, 1, 9, 7 output = 3, 7, 9

28、, 6, 1;input = 3, 6, 1, 9, 7, 8 output =1, 6, 8, 9, 7, 3#include#includeusing namespace std;int cmp(const void *a,const void *b)return *(int*)b-*(int*)a;void paixu(int input,int output,int n);int main() int n;cinn;int *input=new intn;int *output=new intn;for(int i=0;iinputi;qsort(input,n,sizeof(int)

29、,cmp);paixu(input,output,n);for(int i=0;in-1;i+)coutoutputi ;coutoutputn-1endl;delete input;delete output;return 0;void paixu(int input,int output,int n)outputn/2=input0;int m,a=0;if(n%2=0)m=n/2-1;elsem=n/2;for(int i=1;i=m;i+)outputn/2-i=input+a;outputn/2+i=input+a;if(n%2=0)output0=input+a;13.操作系统任务

30、调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 = 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

31、= 0, 3, 1, 7, -1 user_task = 4, 8, 2, 6, -1函数接口 void scheduler(int task, int n, int system_task, int user_task)#includeusing namespace std;void scheduler(int task, int n, int system_task, int user_task);int main() int n; cinn; int *task=new intn; int *system_task=new intn+1; int *user_task=new intn+

32、1; for(int i=0;itaski; scheduler(task,n,system_task,user_task); for(int i=0;system_taski!=-1;i+) coutsystem_taski ; cout-1endl; for(int i=0;user_taski!=-1;i+) coutuser_taski ; cout-1endl; delete task; delete system_task; delete user_task; return 0;void scheduler(int task, int n, int system_task, int

33、 user_task) int m1=0,m2=0,temp;for(int i=0;i=0&taski=50&taski=255)user_taskm2+=i;system_taskm1=-1;user_taskm2=-1;for(int i=0;im1-1;i+)for(int j=i+1;jtasksystem_taskj)temp=system_taski;system_taski=system_taskj;system_taskj=temp;for(int i=0;im2-1;i+)for(int j=i+1;jtaskuser_taskj)temp=user_taski;user_

34、taski=user_taskj;user_taskj=temp;14. 字符串替换描述:编写一个字符串替换函数,如strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ#include#includeusing namespace std;int main() string strSrc,strFind,strReplace; getline(cin,strSrc); getline(cin,strFind); getline(cin,strReplace); int n=strFind.size(); int flag=0,m; while(flag=0) m=strSrc.find(strFind); if(m0) coutstrSrcendl; return 0; else strSrc.replace(m,m+n,strReplace); 15.对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号