资讯详情

2022年华为笔试面试机考真题100道(C/C++语言)

1. 字符串比较

给定字符串A、B和正整数V,A长度等于B,请计算A中满足以下条件的最大连续子串的长度: 1、该连续子串在A和B位置和长度相等。 2、该连续子串|A[i]-B[i]|之和小于等于V。其中|A[i]-B[i]|表示两个字母ASCII码差的绝对值。  输入描述: 第一行为字符串A,只有小写字母,长度是1到1000 第二行为字符串B,只有小写字母,长度是1到1000 第三行为正整数V,V取值在0到10000之间,包括10000。  输出描述: 字符串最大连续子串的长度要求子串|A[i]-B[i]|之和小于等于V  示例1 输入 xxcdefg cdefghi 5 输出 2 说明 字符串A为xxcdefg,字符串B为cdefghi,V=5.它最大的连续子串可以是cd->ef,de->fg,ef->gh,fg->hi,所以最大的连续子串是2. 

2. 字符匹配

给你一个字符串数组(每个字符串都小写字母组成)和一个字符规则(由小写字母和 . 和 * 组成)识别数组中哪些字符串可以与字符规则相匹配。 ‘.‘匹配任何单个字符,‘*所谓匹配,就是要涵盖整个字符串,而不是部分字符串。  输入描述 第一行为空格分隔的多个字符串,单个字符串的长度从1到100,字符串数从1到100 第二行为字符规律,1<=字符规律长度<=50 不需要考虑异常场景  输出描述: 数组中匹配标匹配字符串(从0开始),如果输出不匹配,则将多个匹配的标升序与英文逗号分开-1.  示例1 输入 ab aab .* 输出 0,1 说明 ab中a匹配. b匹配* 完全匹配;aab中a匹配. ab匹配* 可完全匹配;输出相应字符串数组下标;0,1  示例2 输入 ab aab a.b 输出 1 说明 aab第一个a匹配a,第二个a匹配. b匹配b可以完全匹配;输出相应的字符串数组下标1 

3. 找到它

找到它是一个小游戏,你需要在矩阵中找到给定的单词,假设给定的单词HELLOWORLD,只要能在矩阵中找到H->E->L->L->O->W->O->R->L->D连成单词,即使通过。  注意区分英文字母大小写,只能上下左右走,不能回头。  输入描述: 第一行包含两个整数n、m(0<n,m<21),分别表示n行m列的矩阵,第二行时长度不超过100的单词W(在整个矩阵中给定单词只会出现一次),从第三行到到第n+2行时只包含大小写英文字母的长度为m的字符串矩阵。

输出描述:
如果能在矩阵中连成给定的单词,则输出给定单词首字母在矩阵中的位置(第几行 第几列),否则输出“NO”

示例1
输入
5 5
HELLOWORLD
CPUCY
EKLQH
CHELL
LROWO
DGRBC
输出
3 2

示例2
输入

Helloworld
CPUCh
wolle
orldO
EKLQo
PGRBC
输出
NO
说明
区分大小写

4. 停车场车辆统计

标题:停车场车辆统计|时间限制:1s|内存限制:262144k|语言限制:不限
特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占3个车位(长度3),统计停车场最少可以停多少辆车,返回具体的数目。
输入描述
整形字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000.
输出描述
整型数字字符串,表示最少停车数目。
示例1
输入
1 0 1
输出
2
说明
第一个位置放小车,第三位置放小车
示例2
输入
1,1,0,0,1,1,1,0,1
输出
3
说明
第1,2个位置停货车,第5,6,7个位置停卡车,最后个位置停小车

5. 字符串分隔

给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
输入描述:
输入为两行,第一行为参数K,第二行为字符串S。
输出描述:
输出转换后的字符串。
示例1
输入
3
12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每3个字符一组为abC、ABc、4aB、@,abC中小写字母较多,转换为abc,ABc中大写字母较多,转换为ABC,4aB中大小写字母都为1个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@
示例2
输入
12
12abc-abCABc-4aB@
输出
12abc-abCABc4aB@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@

6. 字符串加密

给你一串未加密的字符串str,通过对字符串的每一个字母进行改变来实现加密,加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量,数组a前三位已经赋值:a[0]=1,a[1]=2,a[2]=4。当i>=3时,数组元素a[i]=a[i-1]+a[i-2]+a[i-3],
例如:原文 abcde 加密后 bdgkr,其中偏移量分别是1,2,4,7,13。
输入描述:
第一行为一个整数n(1<=n<=1000),表示有n组测试数据,每组数据包含一行,原文str(只含有小写字母,0<长度<=50)。
输出描述:
每组测试数据输出一行,表示字符串的密文
示例1
输入
1
xy
输出
ya
说明
第一个字符x偏移量是1,即为y,第二个字符y偏移量是2,即为a
示例2
输入
2
Xy
abcde
输出
ya
bdgkr
说明
第二行输出字符偏移量分别是1,2,4,7,13
备注
解答要求
时间限制:2000ms,内存限制:64MB

7. 字符串序列判定

输入两个字符串S和L,都只包含英文小写字母,S长度<=100,L长度<500,000。判定S是否是L的有效子串。
字符串的一个有效子串是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
输入描述
输入两个字符串S和L ,S长度<100,L长度<=500,000
输出描述
S串最后一个有效字符在L中的位置(首位从0开始计算,无有效字符返回-1)
示例:
输入
ace
abcde
输出
4
示例2
输入
fgh
abcde
输出
-1

8. TLV解码

TLV编码是按照[Tag  Length  Value]格式进行编码的,一段码流中的信元用Tag标识,Tag在码流中唯一不重复,Length表示信元Value的长度,Value标识信元的值。码流以某信元的Tag开头,Tag固定占一个字节,Length固定占两个字节,字节序为小端序。
现在给定TLV格式编码的码流,以及需要解码的信元Tag,请输出该信元的Value。
输入码流的16进制字符中,不包括小写字母,且要求输出的16进制字符串中也不需要包含小写字母;码流字符串的最大长度不超过50000个字节。

输入描述:
输入的第一行为一个字符串,表示待解码信元的Tag
输入的第二行为一个字符串,表示待解码的16进制码流,字节之间用空格分割。

输出描述:
输出一个字符串,表示待解码信元以16进制表示的Value

示例1:
输入
31
32 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC
输出
32 33

说明
需要解析的信元Tag是31, 从码流的起始处开始匹配,Tag为32的信元长度为1 (01 00, 小端序表示为1) ;第二个信元的Tag是90, 其长度为2; 第三个信元的Tag是30, 其长度为3; 第四个信元的Tag为31, 其长度为2(02 00), 所以返回长度后面的两个字节即可,即:32 33

9. 按照身高体重排队

输入描述:
两个序列,每个序列由n个正整数组成(0 < n <= 100)。第一个序列中的数值代表身高,第二个序列中的数值表示体重。

输出描述:
排列结果,每个数值都是原始序列中的学生编号,编号从1开始

示例1:
输入
4 
100 100 120 130
40 30 60 50 

输出
2 1 3 4

说明
输出的第一个数字2表示此人原始编号为2,即身高为100, 体重为30这个人。由于他何编号为1的人身高一样,但体重更轻,因此排在1号的前面。

示例2:
输入
3
90 110 90
45 60 45

输出
1 3 2 

说明
1和3的身高体重都相同,需要按照原有位置关系让1排在3前面,而不是3 1 2

10. 按索引范围翻转文章片段

输入一个英文文章片段,翻转指定区间的单词顺序,标点符号和普通字母一样处理。例如输入字符串“I am a developer. ”,区间 [0,3], 则输出“developer. a am I”。

String reverseWords(String s, int start, int end)

输入描述:
使用换行隔开三个参数,第一个参数为英文文章内容,即英文字符串;第二个参数为翻转起始单词下标(下标从0开始);第三个参数为结束单词下标。

输出描述:
翻转后的英文文章片段所有单词之间以一个半角空格分隔进行输出

示例1:
输入
I am a developer.
1
2
输出
I a am developer.

示例2:
输入
  hello world!
0 
1
输出
world! hello

说明
输入字符串可以在前面或者后面包含多余的空格,但是翻转后的字符不能包括多余的空格

示例3:
输入
I am a     developer.
0
3
输出
developer. a am I

说明
如果两个单词间有多余的空格,将翻转后单词间的空格减少到只有一个。

示例4:
输入
Hello!
0
3
输出
EMPTY

说明
指定翻转区间只有一个单词或有无有效单词,则统一输出“EMPTY”

11. 磁盘容量排序

磁盘的容量单位常用的有M、G、T三个等级,它们之间的换算关系为1T=1024G,1G=1024M。
现在给定n块磁盘的容量,请对它们按容量从小到大的顺序进行稳定排序,例如给定5块盘的容量,1T,20M,3G,10G6T,3M12G9M,排序后的结果为20M,3G,3M12G9M,1T,10G6T。请注意单位可以重复出现,上述3M12G9M表示的容量即为 3M + 12G + 9M,和12M12G相等。

输入描述:
输入第一行包含一个整数n (2 <= n <= 100), 表示磁盘的个数,接下来的n行,每行一个字符串(长度大于2,小于30),表示磁盘的容量,由一个或多个格式为mv的子串组成,其中m表示容量大小,v表示容量单位,例如:2M,1T,30G,10G6T,3M12G9M。

磁盘容量m的范围为1到1024的正整数,容量单位v的范围只包含题目中提到的M、G、T三种,换算关系如题目描述。

输出描述:
输出n行,表示n块磁盘按容量排序后的结果。

示例1:
输入
3
1G
2G
1024M

输出
1G
1024M
2G

说明
1G和1024M相等,稳定排序要求保留它们原来的相对位置,故1G在1024M之前

示例2:
输入
3
2G4M
3M2G
1T

输出
3M2G
2G4M
1T

说明
1T的容量大于2G4M,2G4M的容量大于3M2G

12. 打印任务排序

某个打印机根据打印队列执行打印任务,打印任务分为9个优先级,分别用数字1-9表示,数字越大优先级越高。打印机每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A更高优先级的任务,则将任务A放到队列尾部,否则就执行任务A的打印。请编写一个程序,根据输入的打印队列,输出实际的打印顺序。

输入描述:
输入一行,为每个任务的优先级,优先级之间用逗号隔开,优先级取值范围为1-9
输出描述:
输出一行,为每个任务的打印顺序,打印顺序从0开始,用逗号隔开

示例1:
输入
9,3,5
输出
0,2,1

说明
队列头部任务的优先级为9,最先打印,故序号为0;接着队列头部任务优先级为3,队列中还有优先级为5的任务,优先级3任务被移动到队列的尾部;接着打印优先级为5的任务,故其序号为1;最后优先级为3的任务序号为2

示例2:
输入
1,2,2
输出
2,0,1

说明
队列头部任务的优先级为1,被移动到队列尾部,接着顺序打印两个优先级为2的任务,故其序号分别为0和1;最后打印剩下的优先级为1的任务,其序号为2

注意:这道题对顺序的理解容易出现偏差

13. 斗地主之顺子

在斗地主扑克牌游戏中,扑克牌由小到大的顺序为:3、4、5、6、7、8、9、10、J、Q、K、A、2。玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。
其中顺子的出牌规则为:由至少5张由小到大连续递增的扑克牌组成,且不包括2.
例如:{ 
        3,4,5,6,7 }、{ 
        3、4、5、6、7、8、9、10、J、Q、K、A}都是有效的顺子;
而{ 
        J、Q、K、A、2}、{ 
        2、3、4、5、6}、{ 
        3、4、5、6}、{ 
        3、4、5、6、8}等都不是顺子。
给定一个包含13张牌的数组,如果有满足出牌规则的顺子,请输出顺子。
如果存在多个顺子,请每行输出一个顺子,且需要按顺子第一张牌的大小(从小到大)依次输出。
如果没有满足出牌规则的顺子,请输出NO

输入描述:
13张任意顺序的扑克牌,每张扑克牌数字用空格隔开,每张扑克牌的数字都是合法的,并且不包括大小王。
2 9 J 2 3 4 K A 7 9 A 5 6
不需要考虑输入为异常字符的情况

输出描述:
组成的顺子,每张扑克牌数字用空格隔开
3 4 5 6 7

示例1:
输入
2 9 J 2 3 4 K A 7 9 A 5 6
输出
3 4 5 6 7

说明
13张牌中,可以组成的顺子只有1组:3 4 5 6 7

示例2:
输入
2 9 J 10 3 4 K A 7 Q A 5 6
输出
3 4 5 6 7
9 10 J Q K A

说明
13张牌中,可以组2组顺子,从小到大分别为:3 4 5 6 7 和 9 10 J Q K A

示例3:
输入
2 9 9 9 3 4 K A 10 Q A 5 6
输出
NO

说明
13张牌中,无法组成顺子

14. 分班

幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。
小朋友编号为整数,与前一位小朋友同班用Y表示,不同班用N表示。

输入描述:
输入为空格分开的小朋友编号和是否同班的标志。比如:
6/N 2/Y 3/N 4/Y 
表示共4位小朋友,2和6同班,3和2不同班,4和3同班。
其中,小朋友总数不超过999,每个小朋友编号都大于0,小于等于999.
不考虑输入格式错误的问题

输出描述:
输出为两行,每一行记录一个小朋友班的编号,编号用空格分开,且:
编号需要按照大小顺序排列,分班记录中第一个编号小的排在第一行
若只有一个班的小朋友,第二行为空行
若输入不符合要求,则直接输出字符串ERROR

示例1:
输入
1/N 2/Y 3/N 4/Y
输出
1 2
3 4
说明
2的同班标记为Y,因此和1同班
3的同班标记为N,因此和1、2不同班
4的同班标记为Y,因此和3同班
所以1、2同班,3、4同班,输出为:
1 2
3 4

注意:
异常场景的识别,某人同时属于两个班,某个不在任何一个班内

14. 工号不够用咋办

集团员工人数突破20亿人,即将遇到工号不够用的情况。现在设计新的工号系统,新的工号系统由小写英文字母(a-z)和数字(0-9)两部分组成。新工号由一段英文字母开头,之后跟随一段数字,比如:“aaahw0001”,“a12345”,“abcd1”,“a00”。注意,新工号不能全部为字母或者数字,允许数字部分有前导0或者全为0。现在给出新工号至少需要分配的人数X和新工号中字母的长度Y,求新工号中数字的最短长度Z。

输入描述:
一行包含两个非负整数 X  Y, 它们用单个空格分割。其中:
0 < X <= 2^50 - 1
0 < Y <= 5

输出描述:
输出新工号中数字的最短长度Z

示例1:
输入
260 1
输出
1

说明
由于字母长度为1,从26个字母中选择一个字母的组合数为26。
0-9这10个数字中,任选一个数字的组合数量为10
26 * 10 == 260,因此最短数字长度为1

示例2:
输入
26 1
输出
1

说明
其实26个人只需要26个字母就够了,但是由于数字是必须的,所以至少需要1个数字

示例3:
输入
2600 1
输出
2

说明,同上。

15. 猴子爬山

猴子爬山,经过一个有N阶台阶的阶梯,猴子有个习惯,每次只能跳1阶台阶或者3阶台阶,求猴子通过N个台阶有多少种不同的跳跃方式?

输入描述:
输入只有一个整数N (0 < N < 50),表示台阶的数量
输出描述:
输出一个数字,表示多少种跳跃方式

示例1:
输入
50
输出
122106097

示例2:
输入
3
输出
2

提示:斐波拉契数量的非递归解法,否则会爆掉

16. 连续字母长度

给定一个字符串,只包含大写字母,求在包含同一个字母的子串中,长度第k长的子串的长度,相同字母只取最长的那个子串。若子串中只包含同一个字母的子串数小于k,则输出-1.

输入描述:
第一行有一个字符串(1 < 长度 < 100),只包含大写字母
第二行有一个数字,表示k的值

输出描述:
输出连续出现次数第k多的字母的次数

示例1:
输入
AAAAHHHBBCDHHHH
3
输出
2

说明
同一字母连续出现的最多的是A和H,4次;第二多的是H,3次,但是H已经存在4个连续的了,故不再考虑;下个最长的子串是BB,其长度为2,所以最终答案应该输出2

示例2:
输入
AABAAA
2
输出
1

说明
同一字母连续出现的最多的是A,3次;第二多的还是A,两次,但是A已经出现过了,故不考虑;第二个最长子串是B,它的长度是1,所以输出1

示例3:
输入
ABC
4
输出
-1

说明
只含有3个包含同一个字母的子串,小于k,输出-1

示例4:
输入
ABC
2
输出
1

说明
三个子串长度均为1,所以此时k=1、k=2、k=3这三种情况均输出1

17. 流水线

工厂有m条流水线,用于并行完成n个独立的作业,工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。
现给定流水线个数m,和需要完成的作业数n,每个作业的处理时间分别为t1、t2、...、tn。请编程计算处理完成所有作业的耗时为多少?
当n>m时,首先处理时间短的m个作业进入流水线,其他的等待,当某个作业完成时,依次从剩余作业中取处理时间最短的进入处理。

输入描述:
第一行为2个整数(采用空格分隔),分别表示流水线个数m和作业数n
第二行输入n个整数(采用空格分隔),表示每个作业的处理时长t1、t2、...、tn。
其中,0 < m,n < 100, 0 < t1,t2,...,tn < 100。
注:输入都是合法的。

输出描述:
输出处理完所有作业的总时长

示例1
输入
3 5
8 4 3 2 10
输出
13

说明
先安排时间为2、3、4的三个作业。
第一条流水线先完成作业,然后调度剩余时间最短的作业8
第二条流水线完成作业,然后调度剩余时间最短的作业10
总耗时就是第二条流水线完成作业的时间13(3+10)

提示:每次将时间最短的那个任务,扔进当前有空的流水线里面处理。注意这个不是最有的调度方案。

18. 判断一组不等式是否满足约束,并输出最大差

给定一组不等式,判断不等式是否成立,并输出不等式中的最大差(输出浮点数的整数部分),要求:
不等式系数为double类型,是一个二维数组
不等式的变量为int类型,是一个一维数组
不等式的目标值为double类型,是一个一维数组
不等式约束为字符串数组,只能是:“>, >=, <, <=, =”,例如,不等式组:
a11 * x1 + a12 * x2 + a13 * x3 + a14 * x4 + a15 * x5 <= b1;
a21 * x1 + a22 * x2 + a23 * x3 + a24 * x4 + a25 * x5 <= b2;
a31 * x1 + a32 * x2 + a33 * x3 + a34 * x4 + a35 * x5 <= b3;

最大差=max{ 
         
(a11 * x1 + a12 * x2 + a13 * x3 + a14 * x4 + a15 * x5 - b1), 
(a21 * x1 + a22 * x2 + a23 * x3 + a24 * x4 + a25 * x5 - b2), 
(a31 * x1 + a32 * x2 + a33 * x3 + a34 * x4 + a35 * x5 - b3) }
最大差类型为整数,浮点数需要取整数部分

输入描述:
输入只有一行,包含下面四部分:
不等式组系数(double类型):
a11, a12, a13, a14, a15
a21, a22, a23, a24, a25
a31, a32, a33, a34, a35
不等式变量(int类型):
x1, x2, x3, x4, x5
不等式的目标值(double类型): b1, b2, b3
不等式的约束(字符串类型):<=, <=, <=

输入示例:a11, a12, a13, a14, a15;a21, a22, a23, a24, a25;a31, a32, a33, a34, a35;x1, x2, x3, x4, x5;b1, b2, b3;<=, <=, <=

输出描述:
true 或者 false, 最大差

示例1:
输入
2.3, 3, 5.6, 7, 6; 11, 3, 8.6, 25, 1; 0.3, 9, 5.3, 66, 7.8; 1, 3, 2, 7, 5; 340, 670, 80.6; <=, <=, <=
输出
false 458

示例2:
输入
2.36, 3, 6, 7.1, 6; 1, 30, 8.6, 2.5, 21, 0.3, 69, 5.3, 6.6, 7.8; 1, 13, 2, 17, 5; 340, 67, 300, <=, >=, <=
输出
false 758

提示:
注意输入的处理,分号隔离,浮点数的取整

19. 拼接URL

给定一个URL前缀和URL后缀,通过 ”,” 分隔, 需要将其连接成一个完整的URL,如果前缀结尾和后缀开头都没有“/”, 需要自动补上“/”连接符,如果前缀结尾和后缀开头都为“/”, 需要自动去掉重复的“/”。
约束:不用考虑前后缀URL不合法的情况。

输入描述:
URL前缀(长度小于100个字符),URL后缀(长度小于100个字符)
输出描述:
拼接之后的URL

示例1:
输入
/acm, /bb
输出
/acm/bb

示例2:
输入
/abc/, /bcd
输出
/abc/bcd

示例3:
输入
/acd, bef
输出
/acd/bef

示例4:
输入
,
输出
/

20. 求解连续数列

已知连续正整数数列{ 
        K} = K1, K2, K3, ..., Ki的各个数相加之和为S, i=N(0<S<100000 

标签: 聚丙烯膜介质电容器cbb80bsub板端连接器公连接器类型m12t连接器用于m12连接器a21传感器微型对射传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台