通过率 55% · 提交 442 · 通过 244
小慕正在处理一个不等式组的验证问题,需要判断这些不等式是否成立,并计算其中最大的差值()。 具体要求如下: 1. 不等式系数为 double 类型,存储在一个二维数组中; 2. 不等式的变量为 int 类型,存储在一个一维数组中; 3. 不等式的目标值为 double 类型,存储在一个一维数组中; 4. 不等式约束为字符串数组,只能是:"=", ">", ">=", "<=", "<"。 例如,小慕遇到的不等式组如下: a11x1 + a12x2 + a13x3 + a14x4 + a15x5 <= b1 a21x1 + a22x2 + a23x3 + a24x4 + a25x5 <= b2 a31x1 + a32x2 + a33x3 + a34x4 + a35x5 <= b3 最大差 = max{(a11x1 + a12x2 + a13x3 + a14x4 + a15x5 - b1), (a21x1 + a22x2 + a23x3 + a24x4 + a25x5 - b2), (a31x1 + a32x2 + a33x3 + a34x4 + a35x5 - b3)},结果取整数(即输出浮点数的整数部分)。
这类题属于华为 OD 机考真题方向中「100分 / 数学」方向的高频题型,通常考察对「100分 / 数学」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
a11,a12,a13,a14,a15;a21,a22,a23,a24,a25;a31,a32,a33,a34,a35;x1,x2,x3,x4,x5;b1,b2,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
不等式约束(字符串类型):<=,<=,<=
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
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
题目较为简单,题意也不难理解,直接按照题意进行模拟即可。主要考察基础语法知识。代码操作比较机械化,要耐心和细心。
把输入一共包含 6 部分:
之后再对每一部分按照逗号 , 继续拆分,并转换为对应的数据类型:
floatintfloatstr先对输入字符串按照 ";" 进行分割,再对分割后的每一个字符串按照 "," 进行分割并转为列表。注意列表中储存元素的数据类型:
a1_lst, a2_lst, a3_lst, b_lst 是浮点数列表x_lst 列表是整数列表op_lst 列表是字符串列表接下来是对不等式的左边进行计算。每个不等式左边本质上都是一个系数数组和变量数组的点乘。
代码中使用了一个辅助函数 dot_product(a_lst, x_lst) 来完成这个过程:
这里 zip(a_lst, x_lst) 会把同一位置的系数和变量配对,再逐项相乘求和。
每个不等式都有自己的比较符号,因此不能统一判断,而是要根据对应的符号分别处理。代码中通过 check(left_part, right_part, op) 函数来完成这一逻辑:
这个函数的作用很直接:
>=,就判断左边是否大于等于右边<=,就判断左边是否小于等于右边最后只要三个不等式全部成立,输出就是 true;只要有一个不成立,输出就是 false。
复杂度分析 设输入串总长为 L,变量个数为 k(本题固定为 5 个变量、3 个不等式)。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有