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生成- …...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法
使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...
【题解-洛谷】P10480 可达性统计
题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...