华为上机题汇总111题
华为校园招聘软件研发上机测试题及部分解答+

以下是收集到的两套题(没有添加答案),上机测试只有应聘软件研发的才会碰到。
有的写了点自己的解法,如果大家有好的想法欢迎讨论!大家一起学习嘛!以下是上机考试的一些注意事项:(1)考试时长为2个小时,总共有3个题(去年是2个题,难度要比今年大些),编译环境为VC 6.0(C语言)/ Eclipse(Java);(2)3个题目中大致第一个题是最简单的,第三个题是最难的;(3)从服务器上下载题目下来后最好能把工程保存到在电脑重启后不会自动还原的磁盘分区下面,这样不致由于各种意外因素电脑重启过后编的程序不会消失;(4)不要改动所给函数的原型,可以自己添加函数。
另外,华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数。
试题1:2011.9.6 转载自:/liuqiqi677/article/details/67554981、选秀节目打分,分为专家评委和大众评委,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)(这个问题很简单,应该只是涉及了下double/int转换)2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
华为机考题目及答案

华为机考题目及答案1.删除字符串中所有给定的子串(40分)问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。
要求实现函数:int delete_sub_str(const char *str, const char *sub_str, char *result_str)【输入】:str(输入的被操作字符串)、sub_str(需要查找并删除的特定子字符串)【输出】:result_str(在str字符串中删除所有sub_str子字符串后的结果)【返回】:删除的子字符串的个数注:I、子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。
比如:在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。
如果匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。
II、输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。
示例输入:str = "abcde123abcd123"sub_str = "123"输出:result_str = "abcdeabcd"返回:2输入:str = "abcde123abcd123"sub_str = "1234"输出:result_str = "abcde123abcd123"返回:0我的答案:#include#includeint delete_sub_str(const char *str, const char *sub_str, char *result_str);int main(int argc, char *argv[]){char *st = "12fuck345fuck678fuck9";char *sub = "fuck3";char res[50] ="";int count = delete_sub_str(st, sub, res);printf("子字符串的个数是:%d\n", count);printf("删除子字符串后:\n%s\n", res);return 0;}int delete_sub_str(const char *str, const char *sub_str, char *result_str){int num = 0;int i = 0;int j = 0;int k = 0;int index = 0;for(i = 0; str[i] != '\0'; i++){index = i;j = 0;while(str[i] != '\0' && sub_str[j] != '\0' && str[i] == sub_str[j]) {i++;j++;}if(sub_str[j] != '\0'){i = index;result_str[k] = str[i];k++;}else{num++;i--;}}return num;}2.大数加减问题描述:在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。
华为电子材料上机考试笔试题目20200001

单选题(2分/题,合计40题)1.不易与胶粘剂形成化学键粘结的是A.PTFEB.PCC.PAD.PBT2.金属冷却结晶时A.理论结晶温度大于实际结晶温度B.理论结晶温度小于实际结晶温度C.理论结晶温度和实际结晶温度没关系3.逆扩散现象A.二次结晶B.晶界杂质聚集C.布朗运动4.以下非纳米材料特有的性质是:DA.量子隧穿效应B.表面效应C.小尺寸效应D.柯肯达尔效应E.量子限域效应5.Fe焊缝晶体形态主要是柱状晶和等轴晶:AA.正确B.错误6.固体表面能越大,液体越容易润湿:BA.正确B.错误7.以下属于物理键的是:BB.范德华力C.离子键D.共价键8.交变荷载作用下,抵抗破坏能力的概念A.疲劳强度C. 硬度9. 陶瓷材料晶体结构分析的手段A. XRDB.10. 以下不属于位错的是A. 孳晶B. 多晶C. 空位D.11. 大角度品界定义A. > 5~10。
B. > 10^15°C. > 20^30°D. > 30^40°12.为什么没有纯的二氧化钛陶瓷难烧结13.使用DSC、TMA、DMA测试材料的Tg点相差不超过2度正确or错误14.相图表示()下材料的相状态与温度、成分之间的关系A.常压B.平衡C.15.范特荷夫规则,纯固相反应,其过程是A.放热反应B.吸热反应C.等温16.沉淀的生成、溶解和转化的条件是什么17.多选题(4分/题,合计5题)1.请问润湿角满足什么条件,被视作疏水:(CDE)A. > 30°B. > 60°C. > 90°D. >120° E. > 150°2.材料的磁性按照磁化程度分类:(ABCDE)A.顺磁性B.抗磁性C.铁磁性D.亚铁磁性E.反磁性3.材料结晶的必要条件:(ABCD)A.过冷;B.结构起伏;C.能量起伏;D.成分起伏(合金)4.细化材料铸态晶粒的措施:(ABC)A.提高过冷度B.变质处理C.振动与搅拌D.提咼温度判断1、Fe-C相图’Fe3C是最稳定的富碳相。
华为机试题目总结(程序篇)

华为机试题目总结(程序篇)自己写的,水平很挫,仅供参考目录1.语言识别问题2.销售网络问题(未完成)3.股票投资问题4.判断手机号码合法性5.元音字母复制6.验证身份证号7.选秀节目打分8.数组最大值放中间,其他依次放其左右(规律未找着,未完成)9.任务调度(解题关键,需要一个容器来承载下标跟值的一一对应关系,最好就是定义一个结构体)10.将某字符变成小写后的某个字符11.链表的逆序12.单词统计13.字符串进行转换,转换成相应的数字已知:yi er san si wu liu qi ba jiu 分别对应,对一段只含有这几种字符的字符串进行转换,转换成相应的数字14.一个数组中比平均数大的个数15.求一个数组中第一大和第二大数16.字符变成整数17.整数变字符18.判断素数问题19(1).约瑟夫环(循环列表)19(2).约瑟夫环(数学方法只能求出最后的胜利者的序号)19(3).约瑟夫环(容器实现)20.判断某个整数是回文。
即这样的,反过来还是21.判断一个字符串是不是回文22.求一个字符串中的最大回文子串,就是从n个字符开始检查是不是回文,知道m个字符符合回文,那么这个就是最大回文23.找出^n的数24.统计一个数二进制表达中的个数25.镜像反转二进制表达式,并输出十进制值26.连续字符统计27.判断一个字符串中()是否配对28.查找子字符串个数29(1).找出一个字符串中是否包含相同(包括连续的)的子字符串(要求子串长度大于等于)并输出出现频率最高的子字符串29(2)找出一个字符串中是否包含连续相同的子字符串,并输出出现频率最高的子字符串30.删除字符窜中字符数最少的字符31.关于数组的循环移位,左移为负,右移为正32.求一个二维数组每列的最小值33.两个字符串,求最长公共子串34.超大整数加法运算,大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。
华为校园招聘上机笔试题

华为校园招聘上机笔试题华为校园招聘上机笔试题上机时间两小时,3道题1 字串转换问题描述:将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。
例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
要求实现函数:void convert(char *input,char* output)【输入】 char *input , 输入的字符串【输出】 char *output ,输出的`字符串【返回】无示例输入:char*input="abcd"输出:char*output="bcde"输入:char*input="abbbcd"输出:char*output="bcdcde"void convert(char *input,char *output){char c='\0';int tag=0;int len=strlen(input);for(int i=0;i{if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1{output[i]=(input[i]-'a'+1)%26+'a';c=input[i];tag=1;}else{if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同{output[i]=(input[i]-'a'+2)%26+'a';c='\0';tag=0;}else//当前字符与前一个字符相等,且前面已有2n个字符相同。
则按第一次出现算{output[i]=(input[i]-'a'+1)%26+'a';c=output[i];tag=1;}}}}void convert(char *input,char *output){char c='\0';int tag=0;int len=strlen(input);for(int i=0;i{if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1{output[i]=(input[i]-'a'+1)%26+'a';c=input[i];tag=1;}else{if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同{output[i]=(input[i]-'a'+2)%26+'a';c='\0';tag=0;}else//当前字符与前一个字符相等,且前面已有2n个字符相同。
华为机考题

销售网络问题时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte问题描述华为公司积极开拓北美市场,首先在北美建立销售总部,总部在附近地区发展一些销售点,这些销售点可以发展建立下一级销售点,依此类推,最终形成一个新型分级销售网络。
假设在销售网络中,有N个销售点(包括总部),将它们分别编号为1至N。
考虑到金融危机,销售总部决定撤销一些销售点,保留其他销售点。
需要注意是:(1)如果撤销一个销售点,那么该销售点发展的所有下级销售点均要撤销,依此类推;(2)销售总部不能撤销自己;(3)销售总部可以不撤销任何销售点。
请你帮忙告诉华为公司:共存在多少个销售点撤销方案。
问题输入输入包括多个行,首先给出一个整数N,接着N-1行给出销售网络的建立过程,在这N-1行中,第j行(1≤j≤N-1)给出一个整数k(i<k),表示销售点k发展了销售点j。
销售点N就是销售总部。
问题输出输出一行,给出销售点撤销方案数。
样例输入323样例输出3提示:样例有3个销售点(包括总部),“销售点2”发展了“销售点1”,“销售点3”发展了“销售点2”,根据描述,有以下3种销售点撤销方案:(1)不撤销任何销售点;(2)撤销“销售点1”;(3)撤销“销售点1”、“销售点2”。
语言识别问题时间限制(普通/Java):10000MS/30000MS 运行内存限制:65536KByte问题描述给你一段英文或德文文字,你能编程识别它可能是哪种语言吗?研究发现,统计文字中字母“t”(或“T”)与“s”(或“S”)出现的次数,如果给定文字中“t”(或“T”)的出现次数比“s”(或“S”)多,则可能为英文,否则可能为德文。
问题输入输入包括多个行数,首先给出整数N(1<N<10000),接着给出N行文字,每一行文字至少包括一个字符,至多100个字符。
问题输出输出包括一行,如果输入文字可能为英文,则输出English,否则输出Deutsch。
最全华为上机试题及部分答案

2011年华为软件校园招聘编程测验1、请上机编写程序,按题目要求提交文件。
[详见考试说明,点击进入考试说明]3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。
两者相同则得分,不同则不得分。
4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目(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++;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;}(18) 数组比较(20分)•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。
华为上机考试题

华为上机考试题2016年华为上机考试题本文为大家分享的是2016最新的华为认证上机模拟考试题,希望对大家的复习有所帮助!1 (1) 字母大小写反转这到题没什么可说的,只是我很久没写这样要IO输入输出的代码,当时看到华为的提示纸条上写着“只能使用stdin方式输入”,还愣了一会:一定是我打开方式不对,什么时候有了一个stdin的输入函数?难道我又学艺不精了……后面才反应过来,直接按英文字面意思理解为“只能使用标准输入方式”就好了。
好了,言归正传,回到这道题,至少可以用以下两种方式:C++ STL库string中有isupper ,islower ,toupper ,tolower 函数通过 +/- ('a'-'A'+0)(2) n个人围成一圈,从第1个人开始报数,每报到第m个人,则其出局,求最后出局的人的初始序号。
第1种方法,我当时是用了个状态表来记录这人有没有出局,没出局则报数计数器加1并玩下走,碰到第m个报数号则更新状态为已出局,碰到队伍最末则重新移动到队首。
#include#define N 4#define M 3using namespace std;int *man = NULL;int JosephusSol_statusTab(int n,int m){int sn=0 , pos = 0 ,loop_pos=0;do{if( man[pos] == 0 ){//此人未出局loop_pos++;if(loop_pos == m){//找到一轮报数的出局者sn++;man[pos] = sn ; // 标记出局序号loop_pos = 0;}}pos ++ ;if(pos==n)pos = 0;}while(sn!=n);return pos;}int main(){int sn=0 , pos = 0 ,loop_pos=0;man = new int [N];for(int i=0;iman[i] = 0;pos = JosephusSol_statusTab(N,M);cout << pos <if(man != 0)delete [] man;return 0;}第2种方法是双向链表,技术面面试的时候,面试官就考了我这一题,在纸上快速写代码的能力还是有所欠缺。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注: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<iostream>#include<cctype>#include<cstring>using namespace std;void stringchang(const char*,char*);int main(){char input[100],output[100];cin.getline(input,100);stringchang(input,output);cout<<output<<endl;return 0;}void stringchang(const char* input,char* output){int m=strlen(input),n=0;for(int i=0;i<m;i++){if(isalpha(input[i])){if(input[i]=='z')output[n++]='a';else if(input[i]=='Z')output[n++]='A';elseoutput[n++]=input[i]+1;}elseoutput[n++]=input[i];}output[n]='\0';}2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。
方法是先将整型数字转换到数组中,再判断。
函数为int same(int num)其中num是输入的整型数字写的很差,懒得改了,不要看吧!#include<iostream>#include<cstring>using namespace std;int same(int);int main(){int num;cin>>num;int m=same(num);cout<<m<<endl;return 0;}int same(int num){int n[100],n1=0,c=0,i1,j1;while(num>0){n[n1++]=num%10;num/=10;}for(int i=0;i<n1;i++){i1=i;c=0;j1=0;for(int j=0;j<n1;j++){if(n[i1]==n[j]&&i1!=j){c++;j1++if(c>=2)return 1;i1++;}else{c=0;j=j-j1;j1=0;i1=i;}}}return 0;}分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来函数为void mul(char *input1,int n,char *input2, int m,char *output)其中input1和input2是输入,n是input1的长度,n2是input2的长度。
Output是输出#include<iostream>#include<cstring>#include<cmath>using namespace std;void mul(char*,int,char*,int,char*);int main(){char input1[100],input2[100],output[100];cin>>input1>>input2;int n=strlen(input1);int m=strlen(input2);mul(input1,n,input2,m,output);cout<<output<<endl;return 0;}void 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;i<n;i++){i1+=(input1[i]-'0')*pow(10.0,--p1);}for(int i=0;i<m;i++){i2+=(input2[i]-'0')*pow(10.0,--p2);}long long ou=i1*i2;if(ou==0){output[0]='0';output[1]='\0';return;}char temp;while(ou>0){output[p3++]=ou%10+'0';ou/=10;}output[p3]='\0';for(int i=0;i<p3/2;i++){temp=output[i];output[i]=output[p3-1-i];output[p3-1-i]=temp;}4.删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。
#include<iostream>#include<string>using 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);cout<<num<<endl;//cout<<str<<endl; 输出删除后的字符串return 0;}int deletesub(string &str,const string &sub,int n){int m,flag=0,num=0;while(flag==0){m=str.find(sub);if(m<0)return num;else{str.erase(m,n); //删除子串num++;}}}5.约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include<iostream>using namespace std;struct node{int num;node *next;};node *creat(int n){node *q,*p,*head=NULL;for(int i=1;i<=n;i++){p->num=i;if(head==NULL)head=p;elseq->next=p;q=p;}p->next=head;return p;}int main(){int n,k,m;cin>>n>>k>>m;node *l,*q;l=creat(n);q=l;l=l->next;for(int i=1;i<k;i++){q=l;l=l->next;}while(l->next!=l){for(int i=1;i<m;i++){q=l;l=l->next;}cout<<l->num<<"->";q->next=l->next;delete l;l=q->next;}cout<<l->num<<endl;delete l;return 0;}6.比较一个数组的元素是否为回文数组#include<iostream>#include<string>using namespace std;int main(){string str;int m=str.size();for(int i=0;i<m/2;i++){if(str[i]!=str[m-1-i]){cout<<"NO"<<endl;return 0;}}cout<<"YES"<<endl;return 0;}7.比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果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函数返回:02)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6函数返回:3#include<iostream>#include<string>using namespace std;int array_compare(int,int*,int,int*);int main(){int len1,len2;cin>>len1;int *array1=new int[len1];for(int i=0;i<len1;i++){cin>>array1[i];}cin>>len2;int *array2=new int[len2];{cin>>array2[i];}int m=array_compare(len1,array1,len2,array2);cout<<m<<endl;delete []array1;delete []array2;return 0;}int array_compare(int len1,int* array1,int len2,int* array2){int i=len1-1,j=len2-1,num=0;while(i>=0&&j>=0){if(array1[i]!=array2[j])num++;i--;j--;}return num;}8.约瑟夫环变种:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。