华为秋招笔试真题

1.养猪场防疫

老李在多年前承包了一个养猪场,并引入了若干只种猪,经过这些年的经营,现在养猪场有N只猪,编号从0到N-1(每只猪无论生死都有唯一的编号);

老李在每只猪生产的时候记下了生产的母猪和出生的小猪,格式:x y1 y2 y3...([注:x为猪妈妈,y1、 y2、y3....为新生的猪惠,以上编码均在0...N-1内,每只猪可以多次生产,每个猪息只有一个猪妈妈);

为了防疫需要,要检查任意两只猪是否有亲戚关系(两只猪具有相同的祖先),并计算出关系亲疏情况(关系距离,相同编号距离为0).

复制代码
解答要求
时间限制:CIC++1000ms.其他语言:2000ms内存限制:CIC++ 256MB,其他语言:512MB
输入
第一行输入总数N
第二行表示后续生产记录行数M,
后续M行输入生产记录,以空格分隔x y1 y2 y3
最后一行输入m1, m2:表示待检查的m1和m2编号【取值范围】
0<N<=1000000000 0<=M<10000
输出
一个整数,表示m1和m2之间的关系距离,无亲戚关系输出-1

样例1
输入:
3
1
0 1 2
0 1
输出:1
解释:0号生产了1号和2号
所以0号和1号是有亲戚关系(0-1),且关系距离为1

2.速战速决

在一个MxN的街区中,有一个士兵S和一个敌人E,标识X为无法通过的街区,标识B为可以通过的街区;士兵在一个单位时间内可以从一个街区移动到相邻的街区(士兵每次只能水平或者垂直方向移动一个街区);士兵每次改变方向时,需要额外花费---个单位的时间(士兵第一次移动---个街区的时候,不用考虑其初始方向,即只需要---个单位时间即可到达相邻街区).计算士兵S最少需要多少时间才能到达E所在的街区。

复制代码
解答要求
时间限制:C/C++1000ms,其他语言:2000ms
内存限制:CIC++ 256MB,其他语言:512MB

输入
第一行为两个数字,表示街区的大小,M行,N列;(1年M,N <=1000,M、N不同时为1)
接下来M行,每行N个字母,字母S表示士兵所在街区,字母E表示敌人所在街区,字母X表示障碍,字母B表示可以经过的街区。(只有1个S,一个E)
输出
最少需要的时间,当士兵S永远无法到达敌人E所在的街区时,输出-1
样例1
输入:
6 6
SBBBBB
BXXXXB
BBXBBB
XBBXXB
BXBBXB
BBXBEB
输出:
13

3.智慧停车

某公司停车场安装了一套智慧停车系统,在车辆进入停车场时,系统会自动计算一条最短路径,并为这一条路径在地面点亮导路灯,如果没有可用停车位,则在入口亮起红灯,如下图是某一层停车场的平面图(上北下南左西右东),开口处为停车场入口。

为了简化处理,我们使用起始的车道坐标表示停车场入口,用一个二维数组来记录当前的停车情况,如:

复制代码
8 15 8 1
1 2 2 1 2 2 1 2 2  1 2 2 1 2 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 2 1 0 1 3 2 2 2 1 2 2 2 
1 2 1 2 2 0 1 3 1 2 1 2 1 2 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 2 2 2 0 2 2 1 1 0 1 2 1 2
2 2 2 2 2 2 0 2 2 2 0 2 2 2 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

1.8 15表示矩阵的行数M值8,和列数N值15;

2.81表示入口坐标(分别表示行和列,行列号均从1开始计数):8代表第八行,1代表第一列,以空格分隔;即表示入口时绿灯从这个坐标点开始点亮;

3.矩阵数据代表停车场情况:0代表车道;1代表空车位;2代表已停车车位;3代表柱子,不可通过;

请你根据停车场的情况,点亮一条通往可用车位的最短路径。

路径规则:

1.所有车位为南北向,车辆只能从车位的南侧或北侧的车道停入车位,不能横向停车;

2.如果存在相同距离的目标车位,优先选择行坐标较小的,其次选择列坐标较小的: 图中:6 10和6 12 选择610;1 7和3 7选择1 7;到达同一个停车位有多条相同距离的路径,优先选择路径节点行坐标和较小的,其次选择列坐标和较小的

不需校验输入的有效性;

复制代码
解答要求
时间限制:C/C++1000ms,其他语言:2000ms内存限制:C/C++256MB,其他语言:512MB
给定一个起点坐标:i j和一个M*N的停车场二维数组描述图;M(5<=M<= 100) N(5<=N <=100)i (1 <=i<= M)j(1<=j <=N)
样例1
输入:
5 6 2 1
2 1 2 2 1 2 
0 0 0 0 0 0
2 1 2 1 2 1 
1 1 2 1 2 2 
0 0 0 0 0 0
输出:
2 1 2 2 1 2
解释:
1.入口为21,且11和31车位已经占用,向前到2 2;
2.1 2和3 2都可以停车,取行坐标较小的1 2进行停车;
3.输出路径为2 1 2 2 1 2
样例2
输入:
5 9 5 5
2 2 1 2 1 2 1 2 1
0 0 0 0 0 0 0 0 0
2 2 1 1 0 1 2 1 2 
2 2 2 2 0 2 2 2 2
0 0 0 0 0 0 0 0 0
输出:
5 5 4 5 3 5 2 5 1 5
解释:
1.入口为5 5;
2.3 4和3 6是3 5的横向相邻坐标,不能直接停车;
3.1 5的停车步数最小,直接进行停车;
相关推荐
Lee川15 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川18 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i20 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有20 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有21 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫1 天前
Looper.loop() 循环机制
面试
AAA梅狸猫1 天前
Handler基本概念
面试
Wect1 天前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼1 天前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼1 天前
Next.js 企业级落地
前端·javascript·面试