9.20华为机试-后端
1、丢失报文的位置
某通信系统持续向外发送报文,使用数组 nums 保存 n个最近发送的报文,用于在报文未达到对端的情况下重发。报文使用序号 sn 表示,序号 sn 按照报文发送顺序从小到大排序,相邻报文 sn 不完全连续且有可能相同。报文使用循环覆盖的方式保存,即 nums 数组填满后,从头开始保存新的报文。假设需要重发序号为 sn 的报文。请找出序号为 sn的报文在数组中的开始位置和结束位置。
输入
第一行输入:数组 nums 的大小 n,取值范围 [0,10000]。
第二行输入:数组中的所有报文的序号 sn,sn 取值范围 [0,100000]。
第三行输入:需要重发的报文序号 sn,取值范围 [0,100000]。
输出
start end
说明:start 和 end 代表需要重发的报文序号 sn 在数组中的起始下标和结束下标。
样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 输入: 7 0 0 1 2 2 5 6 1输出: 2 2提示: nums数组大小为7。 保存了7个报文,sn分别是0 0 1 2 2 5 6。 sn为1的报文在数组中仅有1个,下标是2,因此输出2 2。输入: 7 0 0 1 2 2 5 6 2输出: 3 4提示: nums数组大小为7。 保存了7个报文,sn分别是0 0 1 2 2 5 6。 sn为2的报文在数组中有2个,下标分别是3,4,因此输出3 4。输入: 7 4 4 7 8 2 3 4 4输出: 6 1提示: nums数组大小为7。 保存了7个报文,sn分别是4 4 7 8 2 3 4。 sn为4的报文在数组中有3个,下标分别是0,1,6,说明数组存在记录满了从头开始记录的情况,输出6 1。输入: 7 4 4 7 8 2 3 4 6输出: -1 -1提示: nums数组大小为7。 保存了7个报文,sn分别是4 4 7 8 2 3 4。 数组中不存在sn为6的报文,因此输出-1 -1。输入: 5 5 5 5 5 5 5输出: 0 4提示: nums数组大小为5 保存了5个报文,sn分别是5 5 5 5 5 数组中所有报文sn都是5,这种情况下认为0是start,4是end,输出0 4。 |
思路
在本题中给定了保存的报文的需序号,这些序号是由发送顺序决定的,我们找到这段数组中最小的一个序号,然后从他开始遍历,标记开始的位置和结束的位置即可
代码
import java.util.Scanner;public class test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = scanner.nextInt();}int x = scanner.nextInt();int p = minElementIndex(a);int l = -1, r = -1;for (int i = 0; i < n; i++) {int q = (p + i) % n;if (a[q] == x) {if (l == -1) {l = q;}r = q;}}System.out.println(l + " " + r);}public static int minElementIndex(int[] arr) {int minIndex = 0;for (int i = 1; i < arr.length; i++) {if (arr[i] < arr[minIndex]) {minIndex = i;}}return minIndex;}
}
2、快速传球
班级组织传球活动,男女同学随机排成 m 行 n 列队伍,第一列中的任意一个男同学都可以作为传球的起点,要求最终将球传到最后一列的任意一个男同学手里,求所有能够完成任务的传球路线中的最优路线(传球次数最少的路线)的传球次数。传球规则:
- 男同学只能将球传给男同学,不能传给女同学。
- 球只能传给身边前后左右相邻的同学。
- 如果游戏不能完成,返回 - 1.
说明:
- 传球次数最少的路线为最优路线。
- 最优路线可能不唯一,不同最优路线都为最少传球次数。
输入
班级同学随机排成的 m 行 n 列队伍,1 代表男同学,0 代表女同学。
输入第一行包含两个用空格分开的整数 m(m∈[1,30]) 和 n(n∈[1,30]),表示 m 行 n 列的队伍,接下来是 m 行每行包含 n 个用空格分开的整数 1 或 0。
输出
最优路线的传球次数(最少传球次数)。
样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 输入: 4 4 1 1 1 0 1 1 1 0 0 0 1 0 0 1 1 1输出: 5提示:图一 图二 图三 . . . 0 . . 1 0 1 1 1 0 1 1 . 0 1 . . 0 . . . 0 0 0 . 0 0 0 . 0 0 0 . 0 0 1 . . 0 1 . . 0 1 . . 图一传球路线需要传球6次。 图二传球路线需要传球6次。 图三传球路线需要传球5次,传球次数最少,为最优传球路线。输入: 3 4 1 0 1 1 1 1 0 0 0 0 1 0输出: -1提示: 选择第1行第1列的男同学作为起点,无法实现按规则将球到最后一列男同学手里。 选择第2行第1列的男同学作为起点,无法实现按规则将球到最后一列男同学手里。 |
解答
解答
声明一个d[][]去计算和存储到达最后一列男生的步数,d[][]同时也起到了记录该点位是否被访问的作用
在初始化阶段将第一列男生入队列,实现多元的bfs遍历。
最终打印最后一列所有男生中d[][]最小的那个值
代码
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class test {static final int N = 35;static final int[] dx = {0,0,1,-1};static final int[] dy = {1,-1,0,0};public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int[][] s = new int[N][N]; // 记录地图int[][] d = new int[N][N]; // 计算到达最后一列男生的最小步for(int i = 1;i<=n;i++){for (int j = 1;j<=m;j++ ){s[i][j] = in.nextInt();d[i][j] = -1;}}Queue<int []> q = new LinkedList<>();for(int i=1;i<=n;i++){ // 初始化第一列,将第一列男生入队列if (s[i][1] == 1){d[i][1] = 0;q.offer(new int[]{i,1});}}while (!q.isEmpty()){ // bfs搜索int[] front = q.poll();int sx = front[0];int sy = front[1];for(int i=0;i<4;i++){int x = sx+dx[i];int y = sy+dy[i];if((x < 1) || (y < 1) || (x > n) || (y > m) || d[x][y]!=-1 || s[x][y]==0){continue;}d[x][y] = d[sx][sy]+1;q.offer(new int[]{x,y});}}int ans = Integer.MAX_VALUE;for (int i = 1; i<=n;i++){if(s[i][m] == 1){ans = Math.min(ans,d[i][n]);}}if(ans == Integer.MAX_VALUE){ans = -1;}System.out.println(ans);}
}
3、简易计算器
设计一款计算器软件,支持以下功能:
1支持 let 关键字。
2支持通过 let 赋值表达式定义变量并初始化。
例如:
1 2 | let var1 = 123 let var = 123 |
3.变量需要先定义再引用,在表达式中引用未定义的变量,则表达式的结果也是未定义的。
例如:
1 2 3 4 | let var1 = 1 let var2 = var1 + 1 // var1是定义的 let var3 = var4 + 1 // var4是未定义的 let var4 = 1 |
4.支持整数类型数据,整数数据的输入格式只需要支持十进制,支持负整数,整数取值范围 −2147483648≤≤2147483647。
例如:
1 2 | let var3 = 10 let var3 = -10 |
5.支持整数的加 (+)、减 (-)、乘 (*)、除 (/) 四则运算,四则运算符之间没有优先级,运算数遵循左结合律,用例不考虑括号。
例如:
1 | let var4 = 1 + 2 * var3 |
上述表达式的计算顺序是,先计算 1+2 结果为 3,再将 3 乘以 var3 得到表达式的结果。
6.支持通过 out 函数打印变量的值,函数参数只接受 1 个变量,不需要支持表达式。
例如:
1 2 | let var4 = 12 out(var4) // 将会输出12 |
7.表达式中如果引用了未定义的变量,则表达式的结果是未定义的。
8.如果计算结果溢出,则表达式结果是溢出。
9.变量命名符合通用语言变量规范,必须是以下划线 (_) 或者字母开头,遇到标点符号或者空格符时结束。
例如:
1 2 3 4 5 6 7 8 | let _ = 1 // 变量名_是合法的 let _abc = 1 // 合法 let abc = 1 // 合法 let Abc_1 = 1 // 合法 let abc.x = 1 // 非法 let abc,x = 1 // 非法 let 12abc = 1 // 非法 let abc x = 1 // 非法 |
输入
- 每一行只有一个表达式。
- 最多支持 24 行输入。
- 每个用例输入至少有一个
out输出表达式,可以有多个out输出表达式。 - 每个变量只会赋值 1 次。
例如:
1 2 3 4 | let var1 = 1 let var2 = 3 let var3 = var1 + var2 out(var3) |
输出
- 每遇到 1 个
out输出表达式,则打印输出变量的值。 - 对于
out行,只会输出一个out表达式的值。 - 如果
out输出的变量未定义,则打印<undefined> - 如果表达式结果发生了整数上溢或者下溢,则对该变量的
out输出表达式输出<underflow>或者<overflow> - 如果表达式非法,则打印
<syntax-error>
样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 输入: let var1 = 1 out(var1)输出: 1输入: out(var)输出: <undefined>提示: 输出的var变量未定义。输入: let var1 = 1 let var2 = 3 let var3 = var1 + var2 out(var3) out(var2) out(var) let var4 = -2147483649 let var5 = 2147483648 out(var4) out(var5) let x.y = 1输出: 4 3 <undefined> <underflow> <overflow> <syntax-error> |
解答
大型模拟,定义相关函数,校验各个字符的正确性之后进行相关运算,
在计算算式的时候采用跨越一个字符的方法遍历,实现计算
代码
# coding=utf-8
ls = []
mn = -(1<<31)
mx = (1<<31) - 1
inf = 10 ** 50
SYNTAX_ERROR = "<syntax-error>"
UNDEFINED = "<undefined>"
UNDERFLOW = "<underflow>"
OVERFLOW = "<overflow>"
mp = {}try:while True:s = input()ls.append(s)
except EOFError:pass # ctrl+d结束输入# 变量命名符合通用语言变量规范,必须是以下划线 (_) 或者字母开头,遇到标点符号或者空格符时结束。
def is_variable_name(name):if len(name) == 0:return Falseif not (name[0].isalpha() or name[0]=='_'):return Falsefor ch in name[1:]:if not (ch.isalpha() or ch.isdigit() or ch == "_"):return Falsereturn True# 支持整数类型数据,整数数据的输入格式只需要支持十进制,支持负整数,
def is_int(s):try:int(s)return Trueexcept ValueError:return False# 将字符串转化为数字,如果他本身就是数字,返回这个数字,如果他是字母,则返回字典中他对应的数据
def convert_int(s):if is_int(s):return int(s)elif s in mp.keys():return mp[s]else:return None# 处理let后面的字符串
def parse_let(s):s = s.strip() #消除空白字符l,r = s.split('=')l,r = l.strip(),r.strip()if not is_variable_name(l):return SYNTAX_ERRORls = r.split(' ')if len(ls) % 2 == 0: # 如果右侧的元素个数为偶数,则说明有问题return SYNTAX_ERRORfor i in range(0,len(ls),2): #校验右侧的字符if not is_variable_name(ls[i]) and not is_int(ls[i]):return SYNTAX_ERRORfor i in range(1,len(ls),2): #校验右侧的运算符if not (len(ls[i])==1 and ls[i] in "+-*/"):return SYNTAX_ERRORv = convert_int(ls[0])for i in range(1,len(ls),2): # 进行加减运算op,w = ls[i],convert_int(ls[i+1])if w is None:returnif op == '+':v += welif op == '-':v -= welif op == '*':v *= welse:v //= wif v>mx:v = infbreakelif v<mn:v = -infbreakmp[l] = v# 输出字符串对应的数字
def parse_out(s):s = s[1:-1] # 去除括号if s in mp.keys():x = mp[s]if x>mx:return OVERFLOWelif x<mn:return UNDEFINEDreturn xelse:return UNDEFINEDfor s in ls:if len(s) >= 3 and s[:3] == "let":t = parse_let(s[3:])if t is not None:print(t) #报错处理elif len(s) >= 3 and s[:3] == "out":print(parse_out(s[3:]))else:print(SYNTAX_ERROR)
相关文章:
9.20华为机试-后端
1、丢失报文的位置 某通信系统持续向外发送报文,使用数组 nums 保存 n个最近发送的报文,用于在报文未达到对端的情况下重发。报文使用序号 sn 表示,序号 sn 按照报文发送顺序从小到大排序,相邻报文 sn 不完全连续且有可能相同。报…...
LC926. 将字符串翻转到单调递增(JAVA - 动态规划)
将字符串翻转到单调递增 题目描述动态规划 题目描述 难度 - 中等 LC926. 将字符串翻转到单调递增(JAVA - 动态规划) 如果一个二进制字符串,是以一些 0(可能没有 0)后面跟着一些 1(也可能没有 1)的形式组成的࿰…...
【高阶数据结构】哈希的应用 {位图;std::bitset;位图的应用;布隆过滤器;布隆过滤器的应用}
一、位图 1.1 位图概念 面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】 遍历查找:内存中无法存放40亿个整数(约占内存15-16G);时间复杂…...
金融生产存储亚健康治理:升级亚健康 3.0 ,应对万盘规模的挑战
随着集群规模的不断扩大,硬盘数量指数级上升,信创 CPU 和操作系统、硬盘多年老化、物理搬迁等多种复杂因素叠加,为企业的存储亚健康管理增加了新的挑战。 在亚健康 2.0 的基础上,星辰天合在 XSKY SDS V6.2 实现了亚健康 3.0&#…...
C语言自定义类型讲解:结构体,枚举,联合(2)
🐵本篇文章将会对位段、枚举和联合的相关知识进行讲解 1. 位段📚 1.1 什么是位段 位段的声明和结构体类似,但是有两点不同: 1.位段的成员必须是int,unsigned int,signed int (C99之后也可以是其他成员&am…...
AI编程助手 Amazon CodeWhisperer 全面解析与实践
目录 引言Amazon CodeWhisperer简介智能编程助手智能代码建议代码自动补全 提升代码质量代码质量提升安全性检测 支持多平台多语言 用户体验和系统兼容性用户体验文档和学习资源个性化体验系统兼容性 功能全面性和代码质量功能全面性代码生成质量和代码安全性 CodeWhisperer的代…...
利用EXCEL进行XXE攻击
利用EXCEL进行XXE攻击 原因 原因 Microsoft Office从2007版本引入了新的开放的XML文件格式,新的XML文件格式基于压缩的ZIP文件格式规范,由许多部分组成。 我们可以将其解压缩到特定的文件夹中来查看其包含的文件夹和文件,可以发现其中多数是…...
芯片验证就是一次旅行
如果你国庆希望去一个你不曾去过的城市旅行,比如“中国苏州”。对游客来说,它是个蛮大的城市,有许多景点可以游玩,还有许多事情可以做。但实际上,即使最豪也最清闲的游客也很难看苏州的所有方方面面。同样的道理也适用…...
Java深入理解线程的三大特性
目录 1 CPU缓存导致可见性问题2 线程切换导致原子性问题3 性能优化导致有序性问题4 JMM(Java Memory Model)5 volatile6 synchronized 1 CPU缓存导致可见性问题 线程的三大特性: 可见性:Visibility有序性:Ordering原子性:Atomic…...
2025快手校招面试真题汇总及其解答(二)
6. hashmap数据结构 HashMap 是一种散列表,它是一种根据键值对来存储数据的数据结构。HashMap 的特点是插入、查找和删除操作的时间复杂度都是 O(1),因此它是一种非常高效的数据结构。 HashMap 的工作原理是将键值对存储在一个数组中,每个键值对都由一个哈希函数来映射到数…...
PHP生成带中文的图片
imagettftext() 函数是 PHP 中的一个内置函数,用于使用 TrueType 字体将文本写入图像。 句法: 数组imagettftext(资源$image,float $size,float $angle, int $x,int $y,…...
java框架-Dubbo
Dubbo整合Springboot BIO NIO Netty Dubbo 原理 在这里插入图片描述...
Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验
在做项目时,需要根据需要动态添加或新增表单,同时还需要对表单做校验。详情如下图: 刚开始做表单验证的时候,对于这个动态的表单验证有点难搞,试了好几种方法都没有搞定。最后按照下面这种方法实现了,以此…...
sns.load_dataset(“iris“)报错原因探究+解决办法
问题描述 import seaborn as sns # 读取数据 iris sns.load_dataset("iris")在代码中使用了seaborn ,并加载iris数据,结果产生了报错信息如下所示 问题分析 原因很简单,我们使用了sns.load_dataset("iris")来加载数据…...
python回文素数
这能有1和本身整除的整数叫素数;如一个素数从左向右和从右向左是相同的数,则该素数为回文素数。编程求出2-1000内的所有回文素数。 源代码: def sushu(n): for i in range(2,n//21): if n%i 0: return False r…...
纽扣电池16CRF1700.15,16CFR1700.20,ANSI C18.3M如何申请?
随着科技的发展,纽扣电池被广泛应用于小型电子产品,如计算器、电子手表、玩具、医疗设备等。由于其体积小,易于拆卸,也造成了儿童误吞的潜在风险。因此,对于纽扣电池的认证和包装,各国均有相应的规定。 在美…...
10.12广州见 | 第十六届智慧城市大会报名通道全面开启
第十六届中国智慧城市大会 将于10月12日至13日 在广州举办 智慧城市是数字中国、智慧社会的核心载体,是数字时代城市发展的高级形态。由中国服务贸易协会、中国测绘学会、中国遥感委员会主办的第十六届中国智慧城市大会,将以“数实融合开放创新智引未…...
2023-油猴(Tampermonkey)脚本推荐
2023-油猴(Tampermonkey)脚本推荐 知乎增强 链接 https://github.com/XIU2/UserScript https://greasyfork.org/zh-CN/scripts/419081 介绍 移除登录弹窗、屏蔽首页视频、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回…...
某度sign参数逆向
文章目录 前文分析完整代码结尾 前文 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 分析 经过我们几次抓包,测试…...
【选型】JAVA生成PPT及选型
可以使用的框架(类库):POI,OpenOffice/LibreOffice,Aspose.Slides,Java开源报表工具(JasperReports,BIRT等)。 具体如下: 方案优点缺点Apache POI- 开源免费- 可完全控制PPT生成- …...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
