专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给定一组不等式,判断是否成立并输出不等式的最大差(输出浮点数的整数部分)要求:
- 不等式系数为 double 类型,是一个二维数组
- 不等式的变量为 int 类型,是一维数组
- 不等式的目标值为 double 类型,是一维数组
- 不等式约束为字符串数组,只能是“>”“>=”“<”“<=”“=
例如,不等式组
- 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 23 a24 a25. a31a32 a33 a34 a35 x1 x2 x3 x4 x5 b1 b2
b3,<=,<=,<=
1、不等式组系数(double 类型)
a11,a12,a13,a14,a15
a21,a22,a23,a24,a25
a31 ,a32 ,a33, a34, a35
2、不等式变量(int 类型):x1,x2,x3,x4,x5
3、不等式目标值(double 类型):b1,b2,b3
4、不等式约束(字符串类型):<=,<=,<=
三、输出描述
true 或者 false,最大差
例如:
输入:
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
四、Java算法源码
package com.guor.od;
import java.util.*;
public class OdTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] split = line.split(";");
double[][] arr = new double[3][5];
int[] coefficient = new int[5];
double[] inputResult = new double[3];
int max = Integer.MIN_VALUE;
// 初始化a11-a35
int index = 0;
String[] segment;
for (int i = 0; i < 3; i++) {
segment = split[i].split(",");
index = 0;
for (int j = 0; j < 5; j++) {
arr[i][j] = Double.parseDouble(segment[index++]);
}
}
// 初始化系数
index = 0;
segment = split[3].split(",");
for (int i = 0; i < 5; i++) {
coefficient[i] = Integer.parseInt(segment[index++]);
}
// 初始化不等式的右边
index = 0;
segment = split[4].split(",");
for (int i = 0; i < 3; i++) {
inputResult[i] = Double.parseDouble(segment[index++]);
}
// 计算并判断
index = 0;
segment = split[5].split(",");
boolean isRight = true;
for (int i = 0; i < 3; i++) {
double sum = 0;
for (int j = 0; j < 5; j++) {
sum += arr[i][j] * coefficient[j];
}
if (isRight) {
if (segment[i].equals(">")) {
isRight = sum > inputResult[i];
} else if (segment[i].equals(">=")) {
isRight = sum >= inputResult[i];
} else if (segment[i].equals("=")) {
isRight = sum == inputResult[i];
} else if (segment[i].equals("<=")) {
isRight = sum <= inputResult[i];
} else if (segment[i].equals("<")) {
isRight = sum < inputResult[i];
}
}
max = (int) Math.max(max, sum - inputResult[i]);
}
System.out.println(isRight + " " + max);
}
}
五、效果展示
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;<=,<=,<=
2、输出
false 458
3、说明
🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。