青峰远望
好好学习,天天敲代码
展开
-
华为OD机试(A&B卷)真题目录(C语言)
2023A+B卷目录,C语言实现原创 2023-10-21 00:33:07 · 520 阅读 · 0 评论 -
华为OD机试 - 找城市(C语言)
当切断通往某个城市 i 的所有道路后,地图上将分为多个连通的城市群,设该城市i的聚集度为DPi(Degree of Polymerization),DPi = max(城市群1的城市个数,城市群2的城市个数,…城市群m 的城市个数)。本题是要我们尝试切断每一个城市的连接,因此我们遍历出每一个城市,比如城市2,然后遇到和城市2相关的连接后,我们就跳过并查集的合并操作,这样就能产生切断效果。对于城市4,切断通往城市4的所有道路后,形成2个城市群[(1,2,3),(5)],DP4 = max(3,1)= 3。原创 2023-11-27 11:58:59 · 447 阅读 · 0 评论 -
华为OD机试 - 二叉树的广度优先遍历(C语言)
而找到根节点A后,我们又可以在中序遍历的左根右遍历顺序,找到A根的左、右子树,即中序遍历中A节点的左边就是A根的左子树,右边就是A根的右子树。而找到左右子树后,我们可以根据后序遍历,再分别找到左、右子树的根,然后再根据中序遍历结果,再找出左子树根的左右子树,以及右子树的左右子树。首先,我们可以根据后序遍历,快速找到树根,即CBEFDA中的A,因为根据左右根遍历顺序,最后一个遍历元素肯定是这颗树的根节点。而层序遍历,指的是,从树的顶层开始向下,每层中按照从左向右的顺序遍历节点,因此上图层序遍历结果为ABC。原创 2023-11-17 12:58:02 · 332 阅读 · 0 评论 -
华为OD机试 - 欢乐的周末(C语言)
同时在遍历矩阵过程中,记录小华、小为(值为2),以及餐厅(值为3)的位置,遍历结束后,首先看小华和小为是不是同一个祖先,若不是,则二者不可连通,就更别说去同一个餐厅了,因此返回0。若二者可以连通,则再看每一个餐厅的祖先是否和华为的祖先相同,若相同则计数++,这样就可以得到小华,小为去的同一个餐厅的数量了。第二行开始为具体的地图,其中:3代表小华和小明选择的聚餐地点;因此,我们可以遍历矩阵中每一个元素,将它和其上下左右元素进行连接,需要注意的是如果遍历的元素本身是1,或者其上下左右的元素是1,则不进行连接。原创 2023-11-17 11:57:27 · 388 阅读 · 0 评论 -
华为OD机试 - 查找接口成功率最优时间段(C语言)
这里,我们为了避免陷入遍历i到j,来计算区间[i, j]的总和,我们可以事先定义一个dp数组,dp[i]表示以0~i区间的和(即前缀和)。数组下标为0-1即[0, 0],数组下标为3-4即[2, 2],数组下标为6-7即[0, 2],这三个部分都满足平均值小于等于2的要求,输入有两行内容,第一行为{minAverageLost},第二行为{数组},数组元素通过空格(” “)分隔,输入解释:minAverageLost=2,数组[0, 0, 100, 2, 2, 99, 0, 2]原创 2023-11-17 11:28:49 · 376 阅读 · 0 评论 -
华为OD机试 - 整数对最小和(C语言)
本题很简单,双重for找出所有整数对,并记录整数对之和,然后排序整数对之和,取出前k个求和,就是题解。假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,两对元素如果对应于array1、array2中的两个下标均相同,则视为同一对元素。取第一个数组第0个元素与第二个数组第0个元素组成1对元素[1,1];取第一个数组第1个元素与第二个数组第0个元素组成1对元素[1,1];求和为1+1+1+1=4,为满足要求的最小和。并对取出的所有元素求和,计算和的最小值。原创 2023-11-17 11:27:00 · 167 阅读 · 0 评论 -
华为OD机试 - 找朋友(C语言)
华为OD机试 - 找朋友(C语言)原创 2023-11-13 11:59:41 · 274 阅读 · 0 评论 -
华为OD机试 - 字符串序列判定(C语言)
华为OD机试 - 字符串序列判定(C语言)原创 2023-11-13 11:31:29 · 208 阅读 · 0 评论 -
华为OD机试 - 求符合要求的结对方式(C语言)
我们可以先将数组A升序,然后外层循环 i 范围0 ~ A.len-1,内层循环 j 范围 A.len-1 ~ i+1,如果遇到A[i]+A[j] === N,则计数++,如果遇到A[i]+A[j] < N,则说明内层后续遍历出来的元素都无法满足要求,则内层循环终止,继续下一次外层。用一个数组A代表程序员的工作能力,公司想通过结对编程的方式提高员工的能力,假设结对后的能力为两个员工的能力之和,求一共有多少种结对方式使结对后能力为N。第二行为数组A的元素,每个元素的取值范围[1,1000]原创 2023-11-02 12:22:44 · 109 阅读 · 0 评论 -
华为OD机试 - 打印任务排序(C语言)
我的策略是,将输入的优先级,存入一个数组priority中,然后升序,假设一共n个任务,那么指针maxIdx = n - 1指向的就是最大优先级。然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则就执行任务A的打印。接下来开始打印头部任务[2, 1],发现该任务的优先级是最高的,因此将他取出后打印,继续取出头部任务[2, 2],发现发现该任务的优先级是最高的,因此将他取出后打印,最后一个任务直接打印,即排队序号为0的任务,打印序号是2,原创 2023-11-01 23:01:50 · 93 阅读 · 0 评论 -
华为OD机试 - 连续出牌数量(C语言)
有这么一款单人卡牌游戏,牌面由颜色和数字组成,颜色为红、黄、蓝、绿中的一种,数字为0-9中的一个。游戏开始时玩家从手牌中选取一张卡牌打出,接下来如果玩家手中有和他上一次打出的手牌颜色或者数字相同的手牌,他可以继续将该手牌打出,直至手牌打光或者没有符合条件可以继续打出的手牌。如果玩家手中有和他上一次打出的手牌颜色或者数字相同的手牌,他可以继续将该手牌打出。如果打(4,y) -> (4, b) -> (3, b),那么能打三张。现给定一副手牌,请找到最优的出牌策略,使打出的手牌最多。手牌数量不超过10。原创 2023-11-01 22:31:24 · 139 阅读 · 0 评论 -
华为OD机试 - 任务最优调度(C语言)
给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。如果其他任务数量较少的话,可以直接在任务2的冷却时间中运行。可以发现,此时策略一的用时就是:总任务数量(每个任务执行耗时间均为1个时间单位)此时,总用时仍然为 (k - 1) * (n + 1) + 1。此时至少用时为: (k - 1) * (n + 1) + 2。此时至少用时为: (k - 1) * (n + 1) + 3。其中n为冷却时间,k为最多任务的数量。1、数量最多的任务有多个,比如用例。原创 2023-11-01 21:41:51 · 173 阅读 · 0 评论 -
华为OD机试 - 学生方阵(C语言)
本题的解题思路其实不难,遍历查找矩阵中每一个M点,然后求该M点的水平、垂直、正对角线、反对角线,四个方向的M点个数,然后保留最大的个数,就是题解。红色M是当前遍历到的M,绿色M是以红色M为原点查找到的M,如上图两个红色M点会重复查找同一条M链。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。输入的第一行为矩阵的行数和列数,接下来的n行为矩阵元素,元素间用”,”分隔。输出一个整数,表示矩阵中最长的位置相连的男生个数。如上图红色M的左上、上、左点都是M,因此红色M的。原创 2023-11-01 19:43:12 · 77 阅读 · 0 评论 -
华为OD机试 - 完全二叉树非叶子部分后序遍历(C语言)
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。给定一个以顺序储存结构存储整数值的完全二叉树序列(最多1000个整数),请找出此完全二叉树的所有非叶子节点部分,然后采用后序遍历方式将此部分树(不包含叶子)输出。了解了完全二叉树和数组的关系后,本题的解决就非常简单了,不需要实现一个完全二叉树的数据结构,直接依赖于数组+深度递归就可以完成完全二叉树的后序遍历。原创 2023-11-01 19:24:10 · 115 阅读 · 0 评论 -
华为OD机试 - 高效的任务规划(C语言)
随后的 N 行每行两个整数,第一个表示 B(0<=B<=10000),第二个表示 J(0<=J<=10000)。你有 n 台机器,编号为 1~n,每台都需要完成一项工作,机器经过配置后都能独立完成一项工作。因为,绿色机器的运行时间更长,而橙色机器可以在绿色机器运行过程中完成配置和执行。如上图是两个机器执行的两种方案,我们可以发现:绿色机器先执行的话,总用时最少。注意,不能同时对两台进行配置,但配置完成的机器们可以同时执行他们各自的工作。先配置3,再配置2,再配置1,执行1分钟,共7分钟。原创 2023-11-01 19:02:54 · 107 阅读 · 0 评论 -
华为OD机试 - 字符串摘要(C语言)
为了避免重复的扫描统计,我们可以一开始就统计好所有字母的出现次数到count中,每扫描一个位置,则对于位置的字母数量count[letter]--,表示该字母在后面还剩多少个。如果是非连续的字符(不区分大小写),则输出:该字符(小写) + 该字母之后字符串中出现的该字符的次数。第一个b非连续字母,该字母之后字符串中还出现了2次(最后的两个Bb) ,所以输出b2。如果当前位置的字母是一个非连续字符,那么我们需要统计当前位置之后的该字母出现次数。c非连续,该字母之后字符串再没有出现过c,输出c0。原创 2023-11-01 15:08:25 · 70 阅读 · 0 评论 -
华为OD机试 - 响应报文时间(C语言)
IGMP 协议中,有一个字段称作最大响应时间 (Max Response Time) ,HOST收到查询报文,解折出 MaxResponsetime 字段后,需要在 (0,MaxResponseTime] 时间 (s) 内选取随机时间回应一个响应报文,如果在随机时间内收到一个新的查询报文,则会根据两者时间的大小,选取小的一方刷新回应时间。第8秒收到第3个报文,响应时间为20秒,则要到8+20=28秒响应,与第上面的报文的响应时间比较获得响应时间最小为11秒;最终得到最小响应报文时间为11秒。原创 2023-11-01 14:30:37 · 110 阅读 · 0 评论 -
华为OD机试 - 报文重排序(C语言)
对报文进行重传和重排序是常用的可靠性机制,重传缓中区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。输出恢复出的原始报文,按照每个子报文的顺序的升序排序恢复出原始报文,顺序后缀需要从恢复出的报文中删除掉。这题解析“字符审报文内容”、"后缀顺序索引"时,我使用了正则匹配的捕获组。本题需要考虑下后缀顺序索引不连续的情况,即不是严格的0~N-1序号。字符串报文内容由[a-z,A-Z]组成,后缀为整型值,表示顺序。输入第一行为N,表示子报文的个数,0 <N ≤ 1000。原创 2023-11-01 11:26:56 · 89 阅读 · 0 评论 -
华为OD机试 - 最长公共后缀(C语言)
下面代码仍然以ACM模式实现,但是会将输入输出处理 和 核心代码 分离。考试时,只需要写出核心代码即可。当然,在上面过程中,一旦发现suffix == “”,即最长公共后缀是空串,则可以直接返回@Zero。本题应该是采用核心代码模式,非ACM模式,因此不需要我们处理输入输出。如果不存在公共后缀,返回固定字符串: @Zero。编写一个函数来查找字符串数组中的最长公共后缀;关于核心代码实现,我的思路如下。否则,返回suffix。原创 2023-10-31 23:32:05 · 69 阅读 · 0 评论 -
华为OD机试 - 可以组成网络的服务器(C语言)
本题极限用例下,深度优先搜索(递归实现)可能会发生Stack Overflow,因此推荐使用广度优先搜索,广度优先搜索依赖于自定义的队列,来完成图的遍历,因此不会发生Stack Overflow。在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1 表示单元格上有服务器,0 表示没有。我们找到一个服务器后,就再去其上下左右找下一个服务器,当找到新服务器,再递归去找其上下左右,按此逻辑,就像拔地瓜藤一样,一下子把所有地瓜都拔出来。为了避免重复统计,我们将统计过的服务器位置的值从1变为0。原创 2023-10-31 00:04:04 · 195 阅读 · 0 评论 -
华为OD机试 - 内存资源分配(C语言)
而资源列表没有顺序要求,因此我们可以将资源列表升序,然后每次申请一个内存时,都在资源列表中进行二分查找,这样即使资源列表有1024长度,最多也只需要10次即可查询到合适的内存池资源,此时整体时间复杂度为NlogM,循环次数降低到了 最大百万级别。有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源返回申请结果成功失败列表。如true,true,true,false,false。但是,即使不做此异常输入处理,也可得95%通过率。原创 2023-10-30 23:10:26 · 111 阅读 · 0 评论 -
华为OD机试 - AI面板识别(C语言)
由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1,右下角x2,y2),按照题目意思,每次取出一个最高的灯(y坐标最小的),然后找出和最高灯坐标相差小于等于灯半径的,作为同一行,然后按照x轴坐标进行升序。AI识别到面板上有N(1 ≤ N ≤ 100)个指示灯,灯大小一样,任意两个之间无重叠。即存在如下用圈框住的三行,因此打印顺序是:1,2,3,4,5。排序后的编号列表,编号之间以空格分隔。编号 x1 y1 x2 y2。第一行为N,表示灯的个数。原创 2023-10-30 12:59:01 · 88 阅读 · 0 评论 -
华为OD机试 - 告警抑制(C语言)
告警抑制,是指高优先级告警抑制低优先级告警的规则。高优先级告警产生后,低优先级告警不再产生。请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。第一行为数字N,表示告警抑制关系个数,0 ≤ N ≤ 120。最后一行为告警产生列表,列表长度[1,100]我们基于用例2来说明下这题。大写字母+0个或者1个数字。告警ID之间以单个空格分隔。原创 2023-10-29 22:46:48 · 70 阅读 · 0 评论 -
华为OD机试 - 信道分配(C语言)
另外,如果单个信道容量就能满足D,比如阶5的单个信道容量是32,虽然此时浪费了一些,但是一个信道只能给一个用户使用,因此为了避免更大的浪费,32的信道就可以单独组合,而不需要组合其他信道。之后我又想,想要最多的组合情况,那么信道就要省着用,比如每个用户需要至少D容量的信道组合,那么我们就尽可能地构造出容量准确为D的信道组合,其中 被减数的标黄部分,经过计算,是可以确定小于 减数的标黄部分的,因此即使我们向低位借,最终还是不够,最后反过来还是要向高位借。第二行,R+1个数字,用空格隔开。原创 2023-10-27 17:04:59 · 202 阅读 · 0 评论 -
华为OD机试 - 周末爬山(C语言)
我们可以假设,爬山的最大高度为maxHeight,到达此高度的最小步数为minStep,则初始时,maxHeight = maxtrix[0][0],minStep = 0。初始时,小明位于(0, 0)位置,此时走的步数step = 0,假设地图为matrix,则到高度matrix[0][0]的最短步数为step=0。本题需要注意的是:向四个方向进行深搜时,需要注意当前位置的高度值,和下一个位置的高度值,之间的差值需要小于等于k,才能进入下一个位置继续广搜。如果没有可以爬的山峰,则高度和步数都返回0。原创 2023-10-27 00:38:25 · 134 阅读 · 0 评论 -
华为OD机试 - 战场索敌(C语言)
有一个大小是N*M的战场地图,被墙壁 '#' 分隔成大小不同的区域,上下左右四个方向相邻的空地 '.' 属于同一个区域,只有空地上可能存在敌人'E”,请求出地图上总共有多少区域里的敌人数小于K。另外,本题数量级稍大,如果采用深度优先搜索(递归实现),则可能会发生栈内存溢出,即Stack Overflow,因此推荐使用深度优先搜索(栈实现),或者广度优先搜索。同属一个源头的深搜区域,就是对应一个被墙隔开的独立区域,如果该独立区域深搜过程中,发现'E',则该区域的敌军数量+1。敌人数小于K的区域数量。原创 2023-10-26 23:05:02 · 111 阅读 · 0 评论 -
华为OD机试 - 计算网络信号、信号强度(C语言)
网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。输入为三行,第一行为 m 、n ,代表输入是一个 m × n 的数组。第三行是 i 、 j,代表需要计算array[i][j]的网络信号值。一个网格如果可以途径不同的传播衰减路径传达,取较大的值作为其信号值。对应的值代表对应的网格是空旷位置,还是信号源,还是阻隔物。输出对应位置的网络信号值,如果网络信号未覆盖到,也输出0。需要输出第1行第4列的网络信号值,如下图,值为2。代表i行j列是阻隔物。原创 2023-10-26 22:40:30 · 82 阅读 · 0 评论 -
华为OD机试 - 污染水域(C语言)
数组中只有0和1,0表示纯净,1表示污染,每天只可污染上下左右的水域,如果开始全部被污染,或永远无法污染,则返回-1。本题可以采用图的多源BFS来解决。图的多源BFS实现关键点在于理解queue的作用。输入一行字符串,字符串可转换为N*N的数组,数组可认为是一个水域,判断多少天后,水域被全部污染。原创 2023-10-26 22:19:20 · 61 阅读 · 0 评论 -
华为OD机试 - 矩阵扩散(C语言)
二维数组的成员初始值都为0,将第[i,j]和[k,l]两个个位置上元素修改成1后,求矩阵的所有元素变为1需要多长时间。给出的样例是一个简单模型,初始点在对角线上,达到中间的位置分别为3次迭代,即3秒。输入数据中的前2个数字表示这是一个m×n的矩阵,m和n不会超过1024大小;其中值为1的成员具备扩散性,每经过1S,将上下左右值为0的成员同化为1。存在一个m×n的二维数组,其成员取值范围为0或1。输入数据中的前2个数字表示这是一个4*4的矩阵;最后2个数字表示另一个扩散点位置为3,3。一共需要4-1=3秒。原创 2023-10-26 21:52:00 · 62 阅读 · 0 评论 -
华为OD机试 - 计算疫情扩散时间(C语言)
自测用例:0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0。我们可以选择创建一个新的newQueue,来记录新增感染区,比如我们可以遍历queue,来讲queue中感染区扩散出去的新感染区都放到newQueue,如果queue中统计的是第一天的感染区,那么newQueue中统计的就是第二天的感染区。原创 2023-10-26 21:29:17 · 71 阅读 · 0 评论 -
华为OD机试 - 宜居星球改造计划(C语言)
假设将火星待改造的区域为row * column的网格,每个网格有3个值,宜居区、可改造区、死亡区,使用YES、NO、NA代替,YES表示该网格已经完成大气改造,NO表示该网格未进行改造,后期可进行改造,NA表示死亡区,不作为判断是否改造完的宜居,无法穿过;请计算这个待改造区域的网格中,可改造区是否能全部成宜居区,如果可以,则返回改造的大阳日天教,不可以则返回-1。可改造区是否能全部变成宜居区,如果可以,则返回改造的太阳日天数,不可以则返回-1。grid[i][j]只有3种情况,YES、NO、NA。原创 2023-10-26 20:59:21 · 65 阅读 · 0 评论 -
华为OD机试 - 查字典(C语言)
简单的实现startsWith函数功能,C语言可以直接使用strncmp实现。输入一个单词前缀和一个字典,输出包含该前缀的单词。所有包含该前缀的单词,多个单词换行输出。单词前缀+字典长度+字典。字典是一个有序单词数组。原创 2023-10-26 02:29:55 · 89 阅读 · 0 评论 -
华为OD机试 - 跳房子II(C语言)
外层for循环遍历newSteps每一个元素,指针为 i,然后再定义两个指针 l = i + 1, r = newSteps.length - 1,假设valSum = newSteps[i].val+ newSteps[l].val + newSteps[r].val,如果 valSum == count,那么i,l,r指向的三数,就是一个符合要求的三数组合,此时再计算下三数的索引之和:idxSum = newSteps[i].idx+ newSteps[l].idx+ newSteps[r].idx。原创 2023-10-26 02:19:27 · 111 阅读 · 0 评论 -
华为OD机试 - 求解连续数列(C语言)
由于要求连续正整数数列的和,因此,S / N 的结果必然是数列的中间值,比如 525 / 6 = 87.5,由于6是偶数个,因此87.5其实就是 87 和 88 的中间值。Ki的各个数相加之和为S,i=N (0<S<100000, 0<N<100000), 求此数列K。得到中间值后,我们就可以根据连续正整数数列半径求出连续数列两个边界值,如果左边界~右边界的元素之和为S,否则求得边界就是符合要求的。再比如 9 / 3 = 3,而9是 2 3 4 数列的和,而3是奇数个,因此3就是2 3 4 数列的中间值。原创 2023-10-26 01:55:49 · 51 阅读 · 0 评论 -
华为OD机试 - 拔河比赛(C语言)
输入为N行员工信息,表示部门报名参加选拔的候选人信息,每行有两个数字,使用空格分隔,表示员工的身高、体重信息。要求输出一个10行的已经排序的参赛员工信息数据,每行有两个数字,使用空格分隔,表示员工的身高、体重信息如。表示两位候选员工,第一人身高181厘米,体重70公斤;输入为一个数组,记录了部门人员的身高、体重信息,如[身高,体重]的方式放置;本题根据考友反馈,题目用例的输出格式可能存在问题。部门全部成员数量为大于10的一个数组。要求输出一个size为10的二维数组。请实现一个选拔队员的小程序。原创 2023-10-26 01:48:00 · 124 阅读 · 0 评论 -
华为OD机试 - 计算最接近的数(C语言)
其中 x[i] * 2 的原因是,新滑窗中x[i]是正的,而旧滑窗中x[i]是负的,为了将-x[i] 变为 +x[i], 则需要为 -x[i] + x[i] * 2。其中,数组中位数:长度为N的数组,按照元素的值大小升序排列后,下标为 N/2 元素的值。然后,求解window和数组x中位数mid的差距,差距绝对值越小,则说明二者越接近。结果最接近于数组中位数的下标 i ,如果有多个 i 满足条件,请返回最大的 i.结果最接近于数组中位数的下标 i ,如果有多个 i 满足条件,请返回最大的 i.原创 2023-10-26 01:33:52 · 116 阅读 · 0 评论 -
华为OD机试 - 符合要求的元组的个数(C语言)
给定一个整数数组 nums、一个数字k,一个整数目标值 target,请问nums中是否存在k个元素使得其相加结果为target,请输出所有符合条件且不重复的k元组的个数。本题的要求的K元组是从整数数组中选取的,这里的整数数组,既可能包含正数,也可能包含负数,也可能包含0,另外最终求得的符合要求的K元组,还要进行去重。而K数之和,其实需要固定K元组中最小的K-2个值,然后通过双指针找到剩余两个数。其中四数之和,是需要固定四元组中的最小的两个值,然后通过双指针找到剩余两个数。第二行是k的取值:2。原创 2023-10-26 01:12:15 · 60 阅读 · 0 评论 -
华为OD机试 - 矩阵元素的边界值(C语言)
下面代码仍然以ACM模式实现,但是会将输入输出处理 和 核心代码 分离。考试时,只需要写出核心代码即可。给定一个N*M矩阵,请先找出M个该矩阵中每列元素的最大值,然后输出这M个值中的最小值。经考友反馈,本题采用核心代码模式,非ACM模式,因此不需要我们处理输入输出。本题非常简单,遍历矩阵,完成每列的最大值查找,然后再找出这些值中最小的输出。N和M的取值范围均为:[0, 100]第一列元素为:1和3,最大值为3;第二列元素为:2和4,最大值为4。各列最大值3和4的最小值为3。原创 2023-10-25 22:52:31 · 83 阅读 · 0 评论 -
华为OD机试 - 表达式括号匹配(C语言)
(1+(2+3)*(3+(8+0))+1-2)这是一个简单的数学表达式,今天不是计算它的值,而是比较它的括号匹配是否正确。本题就是括号匹配的变种题,只是加入了一些干扰字符,我们可以用正则去掉非()的字符,然后利用栈结构校验括号是否成对,可以参考。而((())这样的我们就说他是错误的。注意括号里面的表达式可能是错的,也可能有多个空格,对于这些我们是不用去管的,前面这个式子可以简化为(()(()))这样的括号我们认为它是匹配正确的,如果匹配正确输出括号的对数,否则输出-1。我们只关心括号是否使用正确。原创 2023-10-25 17:22:02 · 96 阅读 · 0 评论 -
华为OD机试 - 素数之积(C语言)
另外如果一个正整数为两个素数的乘积,比如 11 * 13 = 143,则必然只能分解为这两个素数,因为这两个素数无法再次分解,所以该正整数没有其他的素数因子了。RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个 32 位正整数,请对其进行因数分解,找出是哪两个素数的乘积。15 可以被分解为 3 5,由于是这两个素数乘积为15,所以判定为分解成功;27 可以被分解为 3 3 3,由于不是两个素数的乘积,所以判定为分解失败;给定的正整数,要支持。原创 2023-10-25 17:06:41 · 102 阅读 · 0 评论