华为机试试题汇总
华为测试工程师机试真题

华为测试工程师机试题目汇总-附答案1.计算字符串最后一个单词的长度,单词以空格隔开。
输入:hello world 输出:5a=input().split()print(len(a[-1])if len(a)>1elselen(a[0]))Python3.x 中input() 函数接受一个标准输入数据,返回为string 类型。
import sysfor line in sys.stdin:#读入数据a = line.split()print len(a[-1])2.写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。
不区分大小写。
a=input().lower()b=input().lower()print(a.count(b))注:Python lower() 方法转换字符串中所有大写字符为小写。
3.明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。
然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。
请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。
while True:try:n=int(input()) #读入第一行:随机整数的个数res=set()for i in range(n):res.add(int(input()))# 读入第n行:n个随机整数组成的数组for i in sorted(res):print(i)except:break注:set是一个无序且不重复的元素集合。
4.•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
def printStr(string):if len(string) <= 8:print(string + "0" * (8 - len(string)))else:while len(string) > 8:print(string[:8])string = string[8:]print(string + "0" * (8 - len(string)))a=input()b=input()printStr(a)printStr(b)5.写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。
华为笔试真题及答案

华为笔试真题及答案1、华为公司的全称为()A、深圳市华为技术有限公司B、华为技术有限公司C、华为公司D、我司(答案:B,答A、C者酌情给分,答D者马上辞退,我司三令五申制止使用该华为内部土语,屡禁不止,老员工不行教也,只好从新员工抓起,格杀勿论)2、华为公司的企业性质是()A、民营B、私营C、国营D、上市公司(答案:A,此题主要让考生了解公司的性质)3、华为公司的商标象征()A、红太阳B、菊花C、扇贝(答案:B,答A者酌情给分,答C者马上辞退,每天就想着吃)4、从以下选项中选择出公司的常务副总裁()A、任正非B、孙亚芳C、李一男D、郑宝用E、张燕燕(答案:BD,答C者马上辞退,让他到李一男的公司去报到吧)5、华为公司的年终奖一般是在每年的什么时候发()A、元旦后B、春节前C、7月下旬或8月上旬D、劳动节前E、国庆节前(答案:C,切记,由于是年中奖,而不是年终奖)6、华为公司的配给你的”股票是()A、**发的B、用自己的奖金去买(答案:B)7、老板常说的土八路,是指()A、老板自己的革命年月的光芒历史B、本地化的用服兄弟C、季度考核为D的兄弟(答案:B)2023华为笔试真题及答案二1. 找错void test1(){char string[10];char* str1=0123456789;strcpy(string, str1);}答:外表上并且编译都不会错误。
但假如string数组原意表示的是字符串的话,那这个赋值就没有到达意图。
最好定义为char string[11],这样最终一个元素可以存储字符串结尾符\0;void test2(){char string[10], str1[10];for(int I=0; I10;I++){str1[I] =a;}strcpy(string, str1);}答:strcpy使用错误,strcpy只有遇到字符串末尾的\0才会完毕,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]=\0,这样就正常了。
华为机考题目及答案

华为机考题目及答案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之间。
华为机试题 面试题

昨天下午机试三道题目:1.字符去重,例如输入字符串:“aabbccdd”,输出字符串“abcd,要求,不改变字符的顺序。
2.求解类似于2+22+222+2222的和。
3.判断一个邮件地址是否有效。
例如:huawei@ 判断条件:只有一个@符号,最后四个字符是.com ;不含空格;字符只能是‘a-z’,‘A-Z’,‘1-9’,‘_’,‘.’,'@'1.字符串首字母转换成大写举例:输入:this is a book返回:This Is A Book2.统计不同字符串的个数举例:输入:addfsdfasa输出:43.统计数字出现的次数,最大次数的统计出来举例:输入:323324423343输出:3,6华为面向2013年招聘笔试题笔试题目(机试,共两题)题目一:子串分离题目描述:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。
请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。
如果输入“abc def gh i d”,结果将是abc,def,gh,i,d,要求实现函数:void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO 的输入输出示例输入:“abc def gh i d”输出:“abc,def,gh,i,d,”题目二:逆序链表输出。
题目描述:将输入的一个单向链表,逆序后输出链表中的值。
链表定义如下:typedef struct tagListNode{int value;struct tagListNode *next;}ListNode;要求实现函数:void converse(ListNode **head);【输入】head:链表头节点,空间已经开辟好【输出】head:逆序后的链表头节点【返回】无【注意】只需要完成该函数功能算法,中间不需要有任何IO 的输入输出/*题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串。
华为机试试题汇总

1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){intnum[50]={0};inti,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for(i=0;i<n;i++){scanf("%d",&num[i]);}intmin_num=num[0];intmax_num=num[0];for(intj=0;j<n;j++){if(max_num<num[j])max_num=num[j];elseif(min_num>num[j])min_num=num[j];}intsum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return0;}2.求两个长长整型的数据的和并输出,例如输入1233333333333333。
3111111111111111111111111.。
,则输出。
#include<stdio.h>#include<string.h>#include<malloc.h>main(){char*num1,*num2; //两个长长整型数据char*sum;// inttemp;int len_num1,len_num2; // 两个长长整型数据的长度intlen_max,len_min;num1=(char*)malloc(sizeof(char));num2=(char*)malloc(sizeof(char));printf("输入两个长长整型数据:");scanf("%s",num1);printf("输入两个长长整型数据:");scanf("%s",num2);len_num1=strlen(num1);len_num2=strlen(num2);len_max=(len_num1>=len_num2)?len_num1:len_num2;len_min=(len_num1<=len_num2)?len_num1:len_num2;int len_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0x00,len_max+1);//切忌初始化for(;len_num1>0&&len_num2>0;len_num1--,len_num2--){sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0'));}if(len_num1>0){sum[len_max--]=num1[len_num1- 1 ]-'0';len_num1--;}if(len_num2>0){sum[len_max--]=num1[len_num2- 1]-'0';len_num2--;}for(intj=len_max1;j>=0;j--) //实现进位操作{// temp=sum[j]-'0';if(sum[j]>=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char*outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0) //跳出头部0元素j++;for(int m=0;m<len_max1;j++,m++)outsum[m]=sum[j]+'0';outsum[m]='\0';printf("输出两长长整型数据之和:%s\n",outsum);return0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。
100道华为面试题

问题一:Could you please describe yourself?(能否请你形容一下自己?) 这个问题,一来是想要了解你是什么样的人,二来是想看看你是否知道如何重点 式地自我简介。
在回答时,要针对应征工作的性质来凸显自己的特色,可以多 用形容词,并且引用过去的工作经验,但是不必提及公司组织的名称,再者,你 还可以谈谈未来的生涯规画;但如果你是个社会新鲜人,就可以谈谈在校时的丰 功伟业。
比方说,今天你打算去应征行销的职务,你就可以说:I&mcreative andmotivated. I worked on several major marketing projects with positiveresults. I am now looking for achallenging marketing position in anestablished company.(我有创意、乂积极。
曾负责数项大型的行销项U , 皆有成效。
我现在希望在一家深具规模的公司内,担任有挑战性的行销职务。
) 问题二:Why do you think we should employ you?(你认为我们为何要雇用你?)雇主问此问题,希望你试图证明自己是最佳人选9并且测试你是否熟悉应征职务 的工作内容。
回答时,要迎合该公司对该职务的期望,不过切记别给人狂妄自 大的印象。
假设你今天要应征机械丄程的工作,你就可以说:I am suitable for the position, not only because I have a masters degree in mechanical engineering, butalsobecause I have worked in this field for more than five years. I believe that my experience can be put to use in further developing your business.(我很适合该职位,不只因为我有机械工程学的硕 士学位, 上用场,What classes did you like best back in school?(在学校你最喜欢此时,雇主想了解你的学习能力,以及你有兴趣的专业课程是否跟工作扯得上边; 此外,个人在求学过程的好恶,会反应在不同的工作岗位上。
华为机试题目总结(程序篇)

华为机试题目总结(程序篇)自己写的,水平很挫,仅供参考目录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.超大整数加法运算,大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。
华为_机考_答案(精选27题)

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;}2 数组比较(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[])•示例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函数如下:using namespace std;int f(int len1,int arry1[],int len2,int arry2[]){ int k=0;for(int i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--)if(arry1[i]!=arry2[j])k++;return k;}int main(){int num1[]={1,3,5};int num2[]={77,21,1,3,5};int k=f(3,num1,5,num2);cout<<k<<endl;return 0;}3. 约瑟夫问题•问题描述:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){intnum[50]={0};inti,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for(i=0;i<n;i++){scanf("%d",&num[i]);}intmin_num=num[0];intmax_num=num[0];for(intj=0;j<n;j++){if(max_num<num[j])max_num=num[j];elseif(min_num>num[j])min_num=num[j];}intsum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return0;}2.求两个长长整型的数据的和并输出,例如输入1233333333333333。
3111111111111111111111111.。
,则输出。
#include<stdio.h>#include<string.h>#include<malloc.h>main(){char*num1,*num2; //两个长长整型数据char*sum;// inttemp;int len_num1,len_num2; // 两个长长整型数据的长度intlen_max,len_min;num1=(char*)malloc(sizeof(char));num2=(char*)malloc(sizeof(char));printf("输入两个长长整型数据:");scanf("%s",num1);printf("输入两个长长整型数据:");scanf("%s",num2);len_num1=strlen(num1);len_num2=strlen(num2);len_max=(len_num1>=len_num2)?len_num1:len_num2;len_min=(len_num1<=len_num2)?len_num1:len_num2;int len_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0x00,len_max+1);//切忌初始化for(;len_num1>0&&len_num2>0;len_num1--,len_num2--){sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0'));}if(len_num1>0){sum[len_max--]=num1[len_num1- 1 ]-'0';len_num1--;}if(len_num2>0){sum[len_max--]=num1[len_num2- 1]-'0';len_num2--;}for(intj=len_max1;j>=0;j--) //实现进位操作{// temp=sum[j]-'0';if(sum[j]>=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char*outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0) //跳出头部0元素j++;for(int m=0;m<len_max1;j++,m++)outsum[m]=sum[j]+'0';outsum[m]='\0';printf("输出两长长整型数据之和:%s\n",outsum);return0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr,long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#include <stdio.h>#include<string.h>#include<malloc.h>void stringFilter(const char *p_str, longlen, char *p_outstr){intarray[256]={0};const char *tmp = p_str;for(int j=0;j<len;j++){if(array[tmp[j]]==0)*p_outstr++=tmp[j];array[tmp[j]]++;}*p_outstr= '\0';}void main(){char *str = "cccddecc";intlen = strlen(str);char* outstr = (char *)malloc(len*sizeof(char));stringFilter(str,len,outstr);printf("%s\n",outstr);free(outstr);outstr= NULL;}4.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:1. 仅压缩连续重复出现的字符。
比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".2. 压缩字段的格式为"字符重复的次数+字符"。
例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"要求实现函数:void stringZip(const char*pInputStr, long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#include <stdio.h>#include<string.h>#include<malloc.h>void stringZip(const char *p_str, long len,char *p_outstr){intcount=1;for(inti=0;i<len;i++){if(p_str[i]==p_str[i+1]){count++;}else{if(count>1){*p_outstr++= count +'0';*p_outstr++=p_str[i];}else{*p_outstr++=p_str[i];}count = 1;//注意其位置}}*p_outstr= '\0';}void main(){char*str = "cccddecc";printf("压缩之前的字符串为:%s\n",str);intlen = strlen(str);char* outstr = (char*)malloc(len*sizeof(char));stringZip(str,len,outstr);printf("压缩之后的字符串为:%s\n",outstr);free(outstr);outstr= NULL;}5.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:1. 操作数为正整数,不需要考虑计算结果溢出的情况。
2. 若输入算式格式错误,输出结果为“0”。
要求实现函数:void arithmetic(const char*pInputStr, long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#include <stdio.h>#include<string.h>#include<stdlib.h>void arithmetic(const char *input, longlen, char *output){chars1[10];chars2[10];chars3[10];intcnt = 0;intlen_input=strlen(input);for(inti=0;i<len_input;++i){if(input[i]=='')cnt++;}if(cnt!=2){*output++= '0';*output= '\0';return;}sscanf(input,"%s %s %s",s1,s2,s3);if(strlen(s2)!=1||(s2[0]!='+'&&s2[0]!='-')) {*output++= '0';*output= '\0';return;}int len_s1=strlen(s1);for(i=0;i<len_s1;i++){if(s1[i]<'0'||s1[i]>'9'){*output++= '0';*output= '\0';return;}}intlen_s3=strlen(s3);for(i=0;i<len_s3;i++){if(s3[i]<'0'||s3[i]>'9'){*output++= '0';*output= '\0';return;}}int x = atoi(s1);int y = atoi(s3);if(s2[0]=='+'){intresult = x+y;itoa(result,output,10);}elseif(s2[0]=='-'){intresult = x-y;itoa(result,output,10);}else{*output++= '0';*output= '\0';return;}}void main(){charstr[] = {"10 - 23"};charoutstr[10];intlen = strlen(str);arithmetic(str,len,outstr);printf("%s\n",str);printf("%s\n",outstr);}6.一组人(n个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人(约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。