E-不等式是否满足约束并输出最大差(100p)
不等式是否满足约束并输出最大差
问题描述
给定一组不等式,需要判断这些不等式是否全部成立,并计算不等式的最大差值。最大差值定义为所有不等式左边减去右边的最大值,输出时取整数部分(注意:不是向下取整)。
具体要求如下:
- 不等式系数为 double 类型,以二维数组形式给出。
- 不等式变量为 int 类型,以一维数组形式给出。
- 不等式右侧常数项为 double 类型,以一维数组形式给出。
- 不等式约束符号为字符串数组,只能是 ">", ">=", "<", "<=", "="。
输入格式
输入为一行字符串,包含以下内容(用分号分隔):
- 不等式系数(double 类型)
- 不等式变量(int 类型)
- 不等式右侧常数项(double 类型)
- 不等式约束符号(字符串类型) a11,a12,a13,a14,a15,a21,a22,a23,a24,a25, a31,a32,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",表示不等式组是否全部成立。
- 第二行输出一个整数,表示最大差值的整数部分。
样例输入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;<=,<=,<=
样例输出1
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;<=,>=,<=
样例输出2
false
758
解释说明
样例1 | 输入包含三个不等式,所有不等式的约束都是 <=。计算结果显示不等式组不全部成立,最大差值的整数部分是 458。 |
样例2 | 输入包含三个不等式,约束分别是 <=, >=, <=。计算结果显示不等式组不全部成立,最大差值的整数部分是 758。 |
数据范围
- 不等式个数:
- 变量个数:
- 系数、常数项的绝对值不超过 1000
- 变量的绝对值不超过 100
题解
模拟
解题思路如下:
-
解析输入: 首先,我们需要将输入的字符串分割并转换成适当的数据类型。这包括将系数转换为二维 double 数组,变量转换为一维 int 数组,常数项转换为一维 double 数组,以及将约束符号存储为字符串数组。
-
计算每个不等式的左边值: 对于每个不等式,我们需要计算其左边的值。这可以通过将系数与对应的变量相乘并求和来完成。
-
判断不等式是否成立: 比较每个不等式的左边值与右边常数项,根据约束符号判断不等式是否成立。如果所有不等式都成立,则输出 true,否则输出 false。
-
计算最大差值: 对于每个不等式,计算左边值减去右边常数项的差,并找出最大值。最后取这个最大差值的整数部分(注意不是向下取整)。
关键点:
- 注意数据类型的转换,特别是在处理 double 类型时要小心精度问题。
- 在计算最大差值时,要注意不是简单的向下取整,而是取整数部分。这意味着对于负数,我们需要特别处理。
参考代码
- Python
def solve(coefficients, variables, constants, constraints):
# 初始化结果
all_satisfied = True
max_diff = float('-inf')
# 遍历每个不等式
for i in range(len(constants)):
# 计算左边的值
left_value = sum(coef * var for coef, var in zip(coefficients[i], variables))
# 计算差值
diff = left_value - constants[i]
max_diff = max(max_diff, diff)
# 检查不等式是否成立
if constraints[i] == '<=':
all_satisfied &= (left_value <= constants[i])
elif constraints[i] == '>=':
all_satisfied &= (left_value >= constants[i])
elif constraints[i] == '<':
all_satisfied &= (left_value < constants[i])
elif constraints[i] == '>':
all_satisfied &= (left_value > constants[i])
elif constraints[i] == '=':
all_satisfied &= (abs(left_value - constants[i]) < 1e-9)
# 输出结果
print('true' if all_satisfied else 'false')
print(int(max_diff))
# 读取输入
input_str = input().strip()
parts = input_str.split(';')
# 解析系数
coefficients = [list(map(float, part.split(','))) for part in parts[:3]]
# 解析变量
variables = list(map(int, parts[3].split(',')))
# 解析常数项
constants = list(map(float, parts[4].split(',')))
# 解析约束
constraints = parts[5].split(',')
# 调用解决函数
solve(coefficients, variables, constants, constraints)
- C
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cmath>
#include <algorithm>
using namespace std;
vector<string> split(const string& s, char delimiter) {
vector<string> tokens;
string token;
istringstream tokenStream(s);
while (getline(tokenStream,
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
算法刷题笔记 文章被收录于专栏
本专栏收集并整理了一些刷题笔记