华为机试 判断一组不等式是否满足约束并输出最大差

■ 题目描述

【判断一组不等式是否满足约束并输出最大差】

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

要求:

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

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

输入描述

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)不等式约束(字符串类型):<=,<=,<=

输入

a11,a12,a13,a14,a15,a21,a22,a23,a24,a25, a31,a32,a33,a34,a35,x1,x2,x3,x4,x5,b1,b2,b3,<=,<=,<=

输出描述

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


解法1


def max_difference(str):
    l = str.split(";")
    a1 = [x.split(',') for x in l[-3:]]
    a2 = l[:-3]
    b = []
    for i in range(len(a2)):
        c = a2[i].split(',')
        s = 0
        for j in range(len(c)):
            s += float(c[j]) * float(a1[0][j])
        b.append([s, a1[-1][i], float(a1[-2][i])])
    return all([eval('%s %s %s' % (x[0], x[1], x[2])) for x in b]), int(max([x[0] - x[-1] for x in b]))


解法2

list = input().split(";")
num = str(list[-3]).split(",")
b = str(list[-2]).split(",")
s = str(list[-1]).split(",")
maxItem = []
falseRes = []
rangeList = len(list) - 3
rangeNum = len(num)

for i in range(0, rangeList):
    item = str(list[i]).split(",")
    sum = 0
    res = float(b[i])
    for n in range(rangeNum):
        sum = sum + float(item[n]) * float(num[n])
    t = sum - res
    maxI = int(abs(t))
    maxItem.append(maxI)
    # import pdb;pdb.set_trace()
    if t == 0 and (s[i] == "=" or s[i] == "<=" or s[i] == ">="):
        finRes = "true"
    elif t < 0 and (s[i] == "<" or s[i] == "<="):
        finRes = "true"
    elif t > 0 and (s[i] == ">" or s[i] == ">="):
        finRes = "true"
    else:
        finRes = "false"
        falseRes.append(finRes)

print(falseRes)
if 'false' in falseRes:
    ret = "false"
else:
    ret = "true"

print(ret, max(maxItem))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值