当前位置: 首页 > backend >正文

不等式是否满足约束并输出最大差 - 华为OD机试真题(JavaScript 题解)

华为OD机试题库《C++》限时优惠 9.9

华为OD机试题库《Python》限时优惠 9.9

华为OD机试题库《JavaScript》限时优惠 9.9

针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。

看不懂有疑问需要答疑辅导欢迎私VX: code5bug

华为OD机试真题

题目描述

给定一组不等式,判断是否成立并输出不等式的最大差(输出浮点数的整数部分)

要求:

  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)},

类型为整数(输出浮点数的整数部分)

输入描述

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说明:
不等式系数:- 第一行:2, 3, 3, 5.6, 7.6- 第二行:11, 3, 8.6, 25, 1- 第三行:0.3, 9, 5.3, 66, 7.8
变量:x1=1, x2=3, x3=2, x4=7, x5=5
目标值:b1=340, b2=670, b3=80.6
不等式关系:<=, <=, <=对应的三个不等式为:
2.3 x 1 + 3 x 2 + 5.6 x 3 + 7.6 x 4 + 11 x 5 ≤ 340
11 x 1 + 3 x 2 + 8.6 x 3 + 25 x 4 + 1 x 5 ≤ 670
0.3 x 1 + 9 x 2 + 5.3 x 3 + 66 x 4 + 7.8 x 5 ≤ 80.6 不成立
计算每个不等式的左侧表达式,判断是否成立,并计算差值:
第一个不等式的左侧值大于340,不成立。
计算差值,并输出最大差值的整数部分(458)。
最后输出 false 和最大差值 458。

示例2

输入:
2.36,3,6,7.1,6;1,30,8.6,2.5,21;0.3,69,5.3,6.6,7.8;1,13,2,17,5;340,67,300.6;<=,>=,<=输出:
false 758

题解

这道题目属于线性代数与条件判断的结合题型,主要考察对线性不等式的计算和条件判断能力。题目要求我们根据给定的不等式组、变量、目标值和约束条件,判断所有不等式是否成立,并计算最大差值。

解题思路

  1. 解析输入数据:将输入字符串按分号(;)分割成不同部分,分别解析为不等式系数矩阵、变量数组、目标值数组和约束条件数组。
  2. 计算差值:对于每一个不等式,计算其左侧表达式与右侧目标值的差值(即 a11*x1 + a12*x2 + ... + a1n*xn - b1)。
  3. 判断不等式是否成立:根据约束条件(如 <=, >=, <, >, =),判断每个差值是否满足对应的约束。
  4. 计算最大差值:在所有差值中找出最大值,并取其整数部分作为输出。
  5. 输出结果:如果所有不等式都满足约束,输出 true 和最大差值;否则输出 false 和最大差值。

JavaScript

const rl = require('readline').createInterface({input: process.stdin,output: process.stdout,
});var iter = rl[Symbol.asyncIterator]();const readline = async () => (await iter.next()).value;function f(a, x, b) {// 计算不等式差值 a[1] * x[1] + a[2] * x[2] + a[3] * x[3] + a[4] * x[4] + a[5] * x[5] - b;return a.reduce((sum, v, i) => sum + v * x[i], 0) - b;
}// Author: code5bug
(async () => {const ps = (await readline()).split(';');// 解析不等式系数let a = ps.slice(0, 3).map((s) => s.split(',').map(p => parseFloat(p)));// 解析不定式变量let x = ps[3].split(',').map((s) => parseInt(s));// 解析不等式目标值let b = ps[4].split(',').map((s) => parseFloat(s));// 将不等式约束解析成比较的匿名函数 let cmp = ps[5].split(',').map((op) => {if (op === '>') {return x => x > 0;} else if (op === '<') {return x => x < 0;} else if (op === '<=') {return x => x <= 0;} else if (op === '>=')  {return x => x >= 0;} else {return x => x == 0;}});const ds = a.map((row, i) => f(row, x, b[i]));// 检查所有表达是否满足约束const result = ds.every((x, i) => cmp[i](x));// 获取表达式最大的差值const max = Math.max(...ds);// 打印输出结果console.log(result, Math.floor(max))rl.close();
})();

希望这个专栏能让您熟练掌握算法, 🎁🎁🎁。

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

http://www.xdnf.cn/news/12690.html

相关文章:

  • Python60日基础学习打卡Day46
  • 《高等数学》(同济大学·第7版)第二章第四节“隐函数及由参数方程所确定的函数的导数“
  • vue3单独封装表单校验函数
  • 使用 Laravel 中的自定义存根简化工作
  • 【笔记】WSL 中 Rust 安装与测试完整记录
  • 数控滑台技术革新:实现高效精密加工的全面探索
  • 深入剖析MySQL存储架构,索引结构,日志机制,事务提交流程
  • Java基于SpringBoot的校园闲置物品交易系统,附源码+文档说明
  • 《操作系统真相还原》——初探进程
  • 算法-多条件排序
  • 打卡day47
  • Coderider 试用报告
  • 1Panel运行的.net程序无法读取系统字体(因为使用了docker)
  • 硬盘寻址全解析:从 CHS 三维迷宫到 LBA 线性王国
  • 栈(Stack)的学习指南
  • 嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析
  • frida简介及环境搭建
  • 【数据结构】6. 时间与空间复杂度
  • AI-Sphere-Butler之如何启动AI全能管家教程(WSL测试环境下适用)
  • C++修炼:C++11(二)
  • GPT-5:不止于回答,AI学会了“思考”
  • MVC分层架构模式深入剖析
  • 2025年—Comfyui聚合插件:Comfyui-LayerStyle 超多实用功能 | 附各功能模型
  • 【R语言编程——数据调用】
  • SpringBoot-17-MyBatis动态SQL标签之常用标签
  • 【MySQL】10.事务管理
  • C++刷题:日期模拟(1)
  • 使用 C++/OpenCV 创建动态流星雨特效 (实时动画)
  • Linux 系统中的算法技巧与性能优化
  • 浅谈 React Hooks