华为2014笔试算法题(字符串处理部分)

合集下载

华为机考题目及答案

华为机考题目及答案

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

2014华为机试笔试题目

2014华为机试笔试题目

2014华为机试笔试题目2014华为机试笔试题目1.输入摸一个数,然后将其倒过来相加,如果和不是回文串,那么将和再采取同样的操作,在判断得到的是否为回文串,这样往返7次,如果其中有一次是回文就直接打出来,若都没有,那么输出0;也很简单!用库函数更简单,itoa这个!整数转成字符,然后判断回文!2.关于匹配的字符串的个数的最大值,即目标字符串与多个字符串比配,找出匹配最多的那个字符串。

其实代码很简单,我当时用2个数组,下标即为字符,值为出现次数,这样比较即可;可是我输入字符的代码写错了比如要输入Li si;到一个字符数组里面,我写成了char a[200];cin a;//这里错了,应该写为cin.getline(a,200);因为cin输入遇到空格就认为输入结束,所以只有li,没有si3.输入一个十进制的数,与一个n整数,求输出这个十进制数的n 进制的数!分析:哎,真倒霉,可以用atoi函数啊itoa函数#include cstdlib #include cstdio int main(){int num = 10; char str[100]; itoa(num, str, 2);printf( %s\n , str);return 0;}itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是目标字符串,第三个参数是转移数字时所用的基数。

在上例中,转换基数为10。

10:十进制;2:二进制于是想到了一个十进制转二进制的方法:#include cstdlib#include cstdioint main(){int num = 10;char str[100];int n = atoi(itoa(num, str, 2)); printf( %d\n ,n); return 0;}。

华为校招历年机试题目

华为校招历年机试题目

华为历年笔试题目总结因最近要参加华为的招聘,便从网上搜集了一些华为笔试历年题目,现总结献给大家,因本人非软件出生,水平有限,仅供参考,若有误处,请海涵。

1、字符串问题∙问题描述:把一个字符串中的除大写字母、小写字母和数字字符之外的其他字符都去掉,输出新字符串。

∙要求实现函数:void my_string(char* input, char* output)【输入】char* input,输入的字符串【输出】char* output,输出的字符串【返回】无∙示例输入:inp ut = “A*(BC&De+_fg/*”输出:output = “ABCDefg”输入:input = “aB+_9”输出:output = “aB9”程序如下:void my_string(char* input, char* output){int i,j;i=j=0;while(*(input+i)!='\0'){if((*(input+i)>='A'&&*(input+i)<='Z')||(*(input+i)>='a'&&*(input+i)<='z')||(*(input+i)>='0'&&*(input+i)<='9')){*(output+j)=*(input+i);j++;}i++;}*(output+j+1)='\0';}题目描述:输入一个字符串,将其中大写字母转换为对应小写字母之后的第五个字母,若原始大写字母为V~Z, 则转换为对应小写字母的值减21。

其他字符不变,输出转换后的字符串。

例如,对于字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b要求实现函数:void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“Axs3mWss”输出:“fxs3mbss”void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr){int i=0;for(i=0;i<lInputLen;i++){if(pInputStr[i]>='A'&&pInputStr[i]<'V')pOutputStr[i]=pInputStr[i]+'a'-'A'+5;else if(pInputStr[i]>='V'&&pInputStr[i]<='Z')pOutputStr[i]=pInputStr[i]+'a'-'A'-21;elsepOutputStr[i]=pInputStr[i];}}3. 单词统计题目描述:输入一段英文文本,用程序统计出现频率最高和最低的两个单词;英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z)单词之间的分隔符仅考虑这三种:空格( )、英文逗号(,)、英文句号(.);仅大小写不同的单词算同一个单词;如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。

【笔试真题】-华为校招-算法工程师(附答案)

【笔试真题】-华为校招-算法工程师(附答案)

【笔试真题】-华为校招-算法工程师(附答案)
【笔试真题】华为2014校招-算法工程师(附答案)
题目:
1、通过键盘输入一串小写字母(a~z)组成的字符串。

请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
解析:
【输入】 pInputStr:输入字符串
IInputLen:输入字符串长度
【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例
输入:“deefd”输出:“def”
输入:“afafafaf”输出:“af"
输入:“pppppppp”输出:“p”。

华为校园招聘上机笔试题

华为校园招聘上机笔试题

华为校园招聘上机笔试题华为校园招聘上机笔试题上机时间两小时,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个字符相同。

华为公司应聘程序员上机考试题

华为公司应聘程序员上机考试题

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<iostream>#include<cstdlib>#include<string.h>using namespace std;//删除指定的子字符串char* str_del(char* str,int pos,int length){for(int i=pos;i<(strlen(str)-length);i++){str[i] = str[i+length];}for(int i=(strlen(str)-length);i<strlen(str);i++){str[i] = '\0';}return str;}//从原串中获得子串char * get_sub_str(const char* str,int at,int length){char *res = new char[length];for(int i=at,j=0;i<at+length;i++,j++){res[j] = str[i];}return res;}int delete_sub_str(const char *str, const char *sub_str, char *&result_str) {int sub_len = strlen(sub_str);int str_len = strlen(str);int pos = 0;int del_num = 0;char* substr_instr;result_str = new char[sizeof(str)];strcpy(result_str,str);for(;pos<str_len-sub_len;pos++){substr_instr = get_sub_str(result_str,pos,sub_len);if(strcmp(substr_instr,sub_str) == 0){del_num++;result_str = str_del(result_str,pos,sub_len);}}return del_num;}int main(){char* str = "zhushijie";char* sub_str = "shi";char* res;cout<<"Delete num "<<delete_sub_str(str,sub_str,res)<<endl;cout<<res<<endl;return 0;}。

2014华为java笔试题目

2014华为java笔试题目

2014华为java笔试题目一、单项选择题是从语言改进重新设计。

++答案:B2.下列语句哪一个正确程序经编译后会产生machinecode程序经编译后会产生bytecode程序经编译后会产生DLLD.以上都不正确答案:B3.下列说法正确的有中的constructor不可省略必须与class同名,但方法不能与class同名在一个对象被new时执行D.一个class只能定义一个constructor答案:c4.提供java存取数据库能力的包是答案:A5.下列运算符合法的是A.&&B.:=答案:A6.执行如下程序代码a=0;c=0;do{--c;a=a-1;}while;后,c的值是-1D.死循环答案:c7.下列哪一种叙述是正确的修饰符可修饰字段、方法和类B.抽象方法的body部分必须用一对大括号{}包住c.声明抽象方法,大括号可有可无D.声明抽象方法不可写出大括号答案:D8.下列语句正确的是A.形式参数可被视为localvariableB.形式参数可被字段修饰符修饰c.形式参数为方法被调用时,真正被传递的参数D.形式参数不可以是对象答案:A9.下列哪种说法是正确的A.实例方法可直接调用超类的实例方法B.实例方法可直接调用超类的类方法c.实例方法可直接调用其他类的实例方法D.实例方法可直接调用本类的类方法答案:D二、多项选择题程序的种类有A.类2.下列说法正确的有A.环境变量可在编译sourcecode时指定B.在编译程序时,所能指定的环境变量不包括classpath一次可同时编译数个java源文件能指定编译结果要置于哪个目录答案:BcD3.下列标识符不合法的有$答案:AcD4.下列说法错误的有A.数组是一种对象B.数组属于一种原生类=[]={31,23,33,43,35,63}D.数组的大小可以任意改变答案:BcD5.不能用来修饰interface的有答案:AcD6.下列正确的有不会改变实际参数的数值能改变实际参数的参考地址不能改变实际参数的参考地址能改变实际参数的内容答案:AcD7.下列说法错误的有A.在类方法中可用this来调用本类的类方法B.在类方法中调用本类的类方法时可直接调用c.在类方法中只能调用本类中的类方法D.在类方法中绝对不能调用实例方法答案:AcD8.下列说法错误的有面向对象语言容许单独的过程与函数存在面向对象语言容许单独的方法存在语言中的方法属于类中的成员语言中的方法必定隶属于某一类,调用方法与过程或函数相同答案:ABc9.下列说法错误的有A.能被成功运行的javaclass文件必须有main方法就是javaAPI可利用jar选项运行.jar文件D.能被Appletviewer成功运行的javaclass文件必须有main 方法答案:BcD三、判断题程序中的起始类名称必须与存放该类的文件名相同。

2014华为机考(附答案)

2014华为机考(附答案)

目录样题-初级题:从考试成绩中划出及格线 (2)样题-中级题:亮着电灯的盏数 (2)样题-高级题:地铁换乘 (3)8.29去掉最大值、最小值之后剩下的个数 (3)8.29从5个人中选取2个人作为礼仪 (5)8.29验证括号是否匹配 (6)8.31回文数 (8)8.31将第一行中含有第二行中“23”的数输出并排序 (9)8.31翻译电话号码 (11)9.1.AM 将整数倒序输出,剔除重复数据 (12)9.1.AM 大数相减 (14)9.1.AM 判断if语句括号是否合法 (15)9.1.PM (17)9.1.PM (18)9.1.PM (18)样题-初级题:从考试成绩中划出及格线10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数;(2) 保证至少有60%的学生及格;(3) 如果所有的学生都高于60分,则及格线为60分样题-中级题:亮着电灯的盏数一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。

每盏电灯由一个拉线开关控制。

开始,电灯全部关着。

有n个学生从长廊穿过。

第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。

n个学生按此规定走完后,长廊里电灯有几盏亮着。

注:电灯数和学生数一致。

样题-高级题:地铁换乘已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。

经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。

编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。

地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B158.29去掉最大值、最小值之后剩下的个数1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。

华为算法面试经典题目,各种字符串操作算法,快来收藏

华为算法面试经典题目,各种字符串操作算法,快来收藏

华为算法面试经典题目,各种字符串操作算法,快来收藏华为华为题目一:字符串个数统计字符串个数统计一个很常用的算法。

在字符串操作算法中,属于一个比较简单一些的算法题。

但是如果进行扩展的话,还是可以难倒一大部分人的。

下面开始看题目。

题目:编写一个函数,计算字符串中含有的不同字符的个数。

字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。

不在范围内的不作统计。

算法的Java实现代码如下所示:字符串个数统计题目二:字符串反转字符串翻转其实类似于入栈出栈的过程,后进先出。

因此实现时,可以考虑用栈来实现。

题目:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。

(字符串长度不超过1000)。

下面我们写出该问题的Java代码实现方式,如下图:字符串反转题目三:句子逆序句子逆序和字符串翻转还是有一定的区别的,不过原理大致相同。

也可以采取入栈出栈的方式。

只不过句子是以单词为单位。

题目:将一个英文语句以单词为单位逆序排放。

例如“I am a boy”,逆序排放后为“boy a am I”。

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。

该问题的Java代码实现如下:句子逆序题目四:字符串的连接最长路径查询这个题目看上去是不是感觉很难的样子?其实不难哦,下面给出一道题目你就知道了。

题目:给定n个字符串,请对n个字符串按照字典序排列。

输入描述:输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述:数据输出n行,输出结果为按照字典序排列的字符串。

本道题目的Java代码实现方式如下图:字符串的连接最长路径查询题目五:合并表记录这是今天分享的最有难度的一道题目了。

也是今天分享的最后一道题目。

题目:数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

2014年华为机考内部题库

2014年华为机考内部题库

2014年7月6日9:30 B组
第一题输出大写字母
输入一个字符串,输出其中的大写字母。

输入:2,sdARSFGfg
输出:ARSFG
第二题约瑟夫环
N个人报数,数到3就出队,输出最后一个人是几号。

输入:整数N
输出:最后一个人的号码
第三题下围棋
输入一个10*10的棋盘,0代表空,1代表黑子,2代表白子。

输入落子的坐标和棋子的颜色。

输出:具体应该就是围棋的规则,记不住了,总之就是错误输出一个大数,正确的话没有吃掉子就输出0,吃子的话输出吃掉的子的个数(具体忘了,大概就是整数代表黑子个数,负数代表白子个数)
输入:一个正确的残局(10*10)
一个落子(如4 3 1代表在坐标(4,3)上下一个黑子,测试貌似是最少下一步棋。

也可能是几步棋,最多没说,应该就是分出胜负就结束了吧)
输出: 0
或者正整数
或者负整数
或者一个大数。

华为机试ACM(字符组合问题)

华为机试ACM(字符组合问题)

华为机试ACM(字符组合问题)今晚做了华为的机试,3道ACM题,最后⼀道是实现从M个不同字符中任取N个字符的所有组合。

eg: input:ABC 2output:AB AC BC第⼀个输⼊为字符串,第⼆个输⼊为组合的字符个数,当N=0或者N>M时,输出“ERROR”。

思路:可以⽤递归的算法解决,例如ABC中2个字符的所有组合,先选取第⼀个的A,那包含A的2个字符的所有组合就是从后⾯剩余的BC中取1个字符的所有组合,然后选取第⼆个的B,那包含B的2个字符的所有组合就是从后⾯剩余的C中取1个字符的组合,即只有C,到选取第三个的C时,后⾯已经没有字符了,不⾜以组成2个字符的组合。

以此类推,将从M个不同字符中任取N个字符的所有组合递归成从M-1个不同字符任选N-1个字符的所有组合(包含“A”)加上从M-1个个不同字符任选N个字符的所有组合(不包含“A”)。

import java.util.*;public class Main {public static void main(String args[]){Scanner cin = new Scanner(System.in);String str = cin.next();int maxCount = cin.nextInt();char[] chs = str.toCharArray();if(maxCount==0 ||maxCount>str.length()){System.out.print("ERROR");}combination(chs, 0, 0, maxCount, "");}/** @param chs 输⼊的字符数组* @param index 选取的字符所在的数组索引值* @param count 已经选取字符的个数* @param maxCount 输⼊的要选取字符的个数* @param result 已经选取的字符组合**/public static void combination(char[] chs, int index, int count, int maxCount, String result) {if (count == maxCount) {System.out.print(result+" ");return;}for (int i = index; i < chs.length; ++i) {combination(chs, i + 1, count + 1, maxCount, result + chs[i]);}}}。

华为机试oj练习题2014

华为机试oj练习题2014

e)
string s(cstr) //将 C 字符串作为 s 的初值
f)
string s(chars,chars_len) //将 C 字符串前 chars_len 个字符作为字符串 s 的初值。
g)
string s(num,c) //生成一个字符串,包含 num 个 c 字符
h)
string s(beg,end) //以区间 beg;end(不包含 end)内的字符作为字符串 s 的初值
b)
string s(str) //拷贝构造函数 生成 str 的复制品
c)
string s(str,stridx) //将字符串 str 内"始于位置 stridx"的部分当作字符串的初值
d)
string s(str,stridx,strlen) //将字符串 str 内"始于 stridx 且长度顶多 strlen"的部分作为字符串的初值
p) >>,getline() //从 stream 读取某值
q) << //将谋值写入 stream
r) copy() //将某值赋值为一个 C_string s) c_str() //将内容以 C_string 返回 t) data() //将内容以字符数组形式返回 u) substr() //返回某个子字符串 v)查找函数 w)begin() end() //提供类似 STL 的迭代器支持 x) rbegin() rend() //逆向迭代器 y) get_allocator() //返回配置器 下面详细介绍:
s.push_back(‘a’);//这个函数只能增加单个字符 对 STL 熟悉的理解起来很简单
也许你需要在 string 中间的某个位置插入字符串,这时候你可以用 insert()函数,这个函数需要你指定一个安插位置的索引,被 插入的字符串将放在这个索引的后面。

华为2014面试题目(3篇)

华为2014面试题目(3篇)

第1篇随着科技产业的飞速发展,华为作为中国乃至全球通信行业的领军企业,其招聘流程和面试题目一直备受关注。

2014年的华为面试题目涵盖了技术、心理、综合等多个方面,以下是针对当年面试题目的解析和备考指导。

一、技术面试题目解析1. 指针数据交换内容题目描述:以下代码实现了指针所指内容的交换,请解释其原理。

解析:该题考察了指针和数组的基本操作。

代码通过交换指针p1和p2所指向的内存地址中的内容,实现了交换。

2. 指针与多维数组题目描述:给定一个二维数组a[5][5],问指针p的值是多少?解析:该题考察了指针和数组的关系。

根据题意,a[1]为第二行第一列元素的地址,a[1[5]为偏移5个单位,即元素35的地址,因此p的值为35。

3. C语言基础题目描述:以下代码中,哪些语句是错误的?解析:该题考察了C语言的基本语法。

正确的语句包括:- float f1/2; // 错误,应为f1 = 1.0/2;- switch()里数据类型只能是int、char、枚举以及引用字符串;- case 1-2: 是错误的;- 0.5f也是错的,浮点数比较应该用范围;- continue用的不合理。

4. Java类题目描述:请解释临界区概念、常见的排序算法、哈希表原理等。

解析:该题考察了Java编程语言的基本概念。

- 临界区概念:临界区是指多个线程访问共享资源时,需要保证同一时间只有一个线程可以访问该资源。

- 常见的排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序等。

- 哈希表原理:哈希表是一种数据结构,它通过哈希函数将键映射到数组中的一个位置,以快速检索值。

5. 软件工程流程题目描述:请简述软件工程流程。

解析:软件工程流程包括需求分析、系统设计、编码实现、测试、部署和维护等阶段。

6. 数据库知识题目描述:请说明你使用的数据库及其应用场景,以及数据库表的一些优化措施。

解析:该题考察了数据库的基本知识和应用。

请根据个人经历回答。

华为算法岗笔试题

华为算法岗笔试题

华为算法岗笔试题已助力150+人进入国内大厂的《人工智能算法岗江湖武林秘籍》,45家大厂面经秘籍及参考答案:华为面经目录1 华为面经汇总资料2 华为面经涉及基础知识点3 华为面经涉及项目知识点4 数据结构与算法分析相关知识点5 编程高频问题:Python&C、C++方面6 操作系统高频问题:数据库&线程等7 技术&产品&开放性问题1华为面经汇总资料1、1面经汇总参考资料①参考资料:(1)牛客网:华为面经-172篇,(2)知乎面经:(3)面试圈:②面经框架&答案&目录&心得:(1)面经框架及参考答案:(2)大厂目录及整理心得:1、2面经涉及招聘岗位(1)实习岗位类【华为云EI实习岗】、【计算机视觉实习生】、【华为杭研院Cloud&AI昇腾计算产品部算法实习】(2)全职岗位类1、3面试流程时间安排PS:以上流程为大白总结归纳所得,以供参考。

其他注意点:●有些人在第一面之前,还会有机试和性格测试●有些区域是技术面+机试性格测试+三面BOSS面●有些人是先综合面,再HR面1、4华为面经面试心得汇总★华为特别重视底层原理,和其他互联网公司不一样。

★华为的面试看面试官吧!有的人会被很多技术的,有的只是聊聊人生和项目。

★总结一下三场面试,需要准备好编程相关的问题,机器学习相关的问题,自己方向最新的技术。

另外,三场面试都着重问了项目,可能我比较菜,没有发过论文。

自己对项目的细节一定要十分了解,这样就不用慌了,随便问都能答上来。

★每个区域的招聘流程稍微有点差异,不过一般分为基础面试、综合面试:基础面试基本就是聊项目经历或者实习经历,另外有些会从产品的角度出发,出一些发散性思维的题目,不怎么为难你,主要问项目经历综合面试主要谈性格、对华为的认识、为什么想加入华为;主要看重承担压力的能力,表现的性格开朗就Okay了。

★有的时候,面试很难,有的时候很简单,所以还是看人,但是最好认真准备,以不变应万变。

华为上机笔试题

华为上机笔试题

华为上机笔试题(1)求两个整数的最⼩公倍数#include <iostream>using namespace std;int gcd(int a,int b);//⽤辗转相除法求最⼤公约数int main(){int a,b;cin>>a>>b;int res=a*b/gcd(a,b);cout<<res;}int gcd(int a,int b){return a%b==0?b:gcd(b,a%b);}基本思路就是先⽤辗转相除法求得两个数的最⼤公约数,然后两个数相乘除以最⼤公约数就得到了最⼩公倍数。

(2)不使⽤库函数求⼀个数的⽴⽅根主要有两种思路,⼀种是⽤⼆分法,可令左初值为1,右初值为num,不断⼆分找根;另⼀种是⽤⽜顿迭代法,直接⽤迭代公式求解。

⼆分法代码:#include <algorithm>#include <cmath>#include <stdio.h>using namespace std;int main(){double num; //待处理的数scanf("%f",&num);const double err=0.001; //允许的误差bool done=false;double start=1.0,end=num;double res;while(!done){double mid=(start+end)/2;if(abs(pow(mid,3)-num)<=err){res=mid;done=true;}else if(pow(mid,3)-num>err)end=mid;elsestart=mid;}printf("%.1f",res);return 0;}⽜顿迭代法代码:#include <algorithm>#include <cmath>#include <stdio.h>using namespace std;int main(){double num;scanf("%lf",&num);const double err=0.000001;bool done=false;double xn=1;while(!done){if(abs(pow(xn,3)-num)<=err)done=true;else{xn=2.0/3.0*xn+num/(3*xn*xn);}}printf("%.1f",xn);return 0;}⽜顿迭代公式x_{n+1}=x_n-\frac{f(x_n)}{f^*(x_n)},在本道题中相当于要求f(x)=x^3-num=0的解,所以只需要按照上述迭代公式进⾏求解就可以。

华为笔试算法题解

华为笔试算法题解

华为笔试算法题解华为笔试算法题解第1题字符串处理思路:先过滤掉数字,然后按GBK编码扫描汉字的长度,若为偶则⼦串长度length-cnt/2,若为奇则⼦串长度length-(cnt/2+1)(GBK编码汉字为2字节,数值⼩于0)import java.io.UnsupportedEncodingException;import java.util.Scanner;/**** 在GBK编码下,请编写⼀个截取字符串的函数,输⼊为⼀个字符串和字节数,输出为按字节截取的字符串。

但是要保证汉字不被截半个,* 同时忽略字符串中的数字后输出最终结果。

** 输⼊描述:** ⼀⾏字符串和待截取的字节数** 输出描述:** 单独的⼀⾏截取后的字符串** ⽰例1** 输⼊** 华HUA* 4** 输出** 华HU** 备注:** 要保证汉字不被截半个,同时忽略字符串中的数字后输出最终结果。

*/public class Str {static String splitString(String str,int length){try {byte[] bytes = str.getBytes("GBK");int cnt=0;for(byte x:bytes){if(x<0) cnt++;}if(cnt%2==0) return str.substring(0,length-cnt/2);else return str.substring(0,length-cnt/2-1);}catch (UnsupportedEncodingException e){e.printStackTrace();}return null;}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);while(scanner.hasNext()){String str=scanner.nextLine();int length=scanner.nextInt();String str1=str.replaceAll("\\d","");String ans=splitString(str1,length);System.out.println(ans);}scanner.close();}}第2题⽇期利⽤Calendar类处理,注意⽉份从0开始,星期从周⽇开始import java.util.Calendar;import java.util.Scanner;/**** 13号⼜恰好是星期五真的很特殊吗?也就是说,13号出现在星期五的⼏率⽐出现在其它周⽇的⼏率⼤吗?要回答这个问题,** 写⼀个程序计算13⽇出现在某个星期的次数(在给定的N年时间中)。

2014-8-19-华为机试题

2014-8-19-华为机试题

/*描述:给定一个只包含字母的字符串,将其大写字母转换成小写字母,小写字母转换成大写字母,最后拼接在一起倒着输出运行时间限制: 1 Sec内存限制: 无限制输入:输入内容只存在若干个字符串,只包含字母,每个字符串之间以空格隔开,所有输入内容的总长度不超过255。

输出:输出一个字符串,开头无空格,结尾换行样例输入:UOY EVOL I样例输出:iloveyou*/#include <stdio.h>#include <string.h>#include <ctype.h>#include <malloc.h>void main(){int i = 0;int j = 0;char ss[256] = {'\0'};int len;char *p;// char tmp;gets(ss);len = strlen(ss); //字符串长度p = (char*)malloc(len+1); //申请空间for(i=len-1;i>=0;i--) //从最后一个开始处理{if(isupper(ss[i])) //大写字母{*(p+j) = ss[i]+('a'-'A');j++;}else if(islower(ss[i]))*(p+j) = ss[i]-('a'-'A');j++;}}*(p+j)='\0';printf("%s\r\n",p);free(p);}题目二:/*述:某协议包括字段:类型Type 一个字节;命令字Command 一个字节;端口号Port 2个字节;结果Result 2个字节;传输模式TransMode 2个字节;上传速度RateUp 4个字节;下载速度RateDown 4个字节;说明:(1) 协议采用网络序(2) 协议数据内容为内存16进制值如下为一个简单的协议数据:18 12 00 0a 00 00 00 01 00 03 0D 40 00 00 00 14通过数据我们并不能直观地看出对应的参数值,所以通过程序自动实现协议解析运行时间限制: 10 Sec内存限制: 128 MByte输入:一行字符串,内容为内存16进制值,每个16进制值之间用空格隔开输出:解析协议,每个协议字段一行,按示例顺序输出。

2014华为编程大赛题目和答案

2014华为编程大赛题目和答案

注意事项:1. 每道题最多只能提交5次;2. 程序从标准输入stdin('Standard Input')获取输入,并将输出结果输出到标准输出stdout('Standard Output')。

3. 输入输出均不能含有任何提示信息;4. 测试平台的编译内核为VS2005及JDK1.7 。

使用Java答题时,类名必须为"Main",不要使用package关键字声明;使用C/C++答用VS2005支持的数据类型和函数;5. 代码中不允许有任何文件操作;6. 提交答案时请提交全部代码,包括main函数和所有子函数;7. 答案提交后,点击状态可以查看判题结果及相应提示;8. 信息注册环节不可跳过,否则无法导出成绩。

外星人比数的大小#include<stdio.h>#include<math.h>void main(){int erjinz(int a);int a,b,x,y,a1,b1;scanf_2("%d%d",&a,&b);if(a>32768||a<-32768||b>32768||b<-32768)printf("%d",-1);else {a1=abs(a);b1=abs(b);x=erjinz(a1);y=erjinz(b1);if(x==y)printf("%d",1);else printf("%d",(x>y)?a:b);}}int erjinz(int a){int temp=0;do{temp=temp+a%2;a=a/2;}while(a!=0);return(temp);}笨笨熊搬家打包篇描述:森林里的笨笨熊今天可开心啦——他买了新房子,乔迁新喜要搬家了。

因此,笨笨熊请了许多好朋友来帮忙搬家,并准备了很多小纸盒用来装需要搬的物品,不过,这些纸盒的容积都是相同的,并且最多只能装两个物品。

大厂笔试算法题

大厂笔试算法题

大厂笔试算法题本次大厂笔试算法题共有三道,分别为字符串操作、动态规划和图论算法。

以下将对每道题目进行详细介绍和解答。

1. 字符串操作题目描述:给定一个字符串s和一个整数k,将字符串s中的每个长度为k的子串反转,如果剩下的字符少于k个,则将剩下的字符全部反转。

解题思路:首先需要判断字符串s的长度是否小于k,如果小于k,则直接将整个字符串反转即可。

如果字符串长度大于等于k,则需要对每个长度为k的子串进行反转。

可以使用双指针的方法,从字符串s的开头开始,每次移动k个字符,将这k个字符进行反转。

如果剩下的字符不足k个,则将剩下的字符全部反转。

代码实现:```public String reverseStr(String s, int k) {char[] arr = s.toCharArray();int n = arr.length;for (int i = 0; i < n; i += 2 * k) {int left = i;int right = Math.min(i + k - 1, n - 1);while (left < right) {char tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}}return new String(arr);}```2. 动态规划题目描述:给定一个数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

解题思路:可以使用动态规划的思想来解决该问题。

设dp[i]表示以第i个元素结尾的最大子数组和,则有:```dp[i] = max(dp[i-1]+nums[i], nums[i])```其中,dp[0]=nums[0]。

最终的结果即为dp数组中的最大值。

代码实现:```public int maxSubArray(int[] nums) {int n = nums.length;int[] dp = new int[n];dp[0] = nums[0];int res = dp[0];for (int i = 1; i < n; i++) {dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);res = Math.max(res, dp[i]);}return res;}```3. 图论算法题目描述:给定一个有向图,判断其中是否存在环。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华为2014笔试算法题(字符串处理部分)
1.通过键盘输入一串小写字母(a~z)组成的字符串。

请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char
*pOutputStr);
【输入】pInputStr:输入字符串
lInputLen:输入字符串长度
【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd”输出:“def”
输入:“afafafaf”输出:“af”
输入:“pppppppp”输出:“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。

一定要保证编译运行不受影响
1. #include <iostream>
2. #include <cassert>
3.
4. u sing namespace std;
5.
6. b ool g_flag[26];
7. v oid stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
8. {
9. assert(pInputStr != NULL);
10. int i = 0;
11. if (pInputStr == NULL || lInputLen <= 1)
12. {
13. return;
14. }
15. const char *p = pInputStr;
16. while(*p != '\0')
17. {
18. if (g_flag[(*p - 'a')])
19. {
20. p++;
21. }else{
22. pOutputStr[i++] = *p;
23. g_flag[*p - 'a'] = 1;
24. p++;
25. }
26. }
27. pOutputStr[i] = '\0';
28. }
29. int main()
30. {
31. memset(g_flag,0,sizeof(g_flag));
32. char input[] = "abacacde";
33. char *output = new char[strlen(input) + 1];
34. stringFilter(input,strlen(input),output);
35. cout<<output<<endl;
36. delete output;
37. return 0;
38. }
2.
通过键盘输入一串小写字母(a~z)组成的字符串。

请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:
1、仅压缩连续重复出现的字符。

比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。

2、压缩字段的格式为"字符重复的次数+字符"。

例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】pInputStr:输入字符串
lInputLen:输入字符串长度
【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc”输出:“3c2de2c”
输入:“adef”输出:“adef”
输入:“pppppppp” 输出:“8p”
1. #include <iostream>
2. #include <cassert>
3. u sing namespace std;
4. void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
5. {
6. const char *p = pInputStr;
7. int num = 1;
8. int i = 0;
9. p++;
10. while(*p != NULL)
11. {
12. while(*p == *(p-1)&& *p != NULL)
13. {
14. num++;
15. p++;
16. }
17. if (num > 1)
18. {
19. int size = 0;
20. int temp = num;
21. while(num) //计算位数
22. {
23. size++;
24. num /= 10;
25. }
26. num = 1;
27.
28. for (int j = size; j > 0; j--)
29. {
30. pOutputStr[i+j-1] = '0'+ temp%10;
31. temp /= 10;
32. }
33. i +=size;
34. pOutputStr[i++] = *(p-1);
35. p++;
36. }else{
37. pOutputStr[i++] = *(p-1);
38. p++;
39. }
40. }
41. pOutputStr[i] = '\0';
42. }
43.
44. int main()
45. {
46. char input[] = "cccddecc";
47. char *output = new char[strlen(input) + 1];
48. stringZip(input,strlen(input),output);
49. cout<<output<<endl;
50. return 0;
51. }。

相关文档
最新文档