【华为OD真题 Python】游戏分组

根据10名参赛者的游戏评分,利用Python编程实现将他们分为两组,使得两队实力尽可能接近,输出实力差的最小绝对值。示例中,评分分别为5 1 8 3 4 6 7 10 9 2的参赛者,最佳分组为(1 3 5 8 10)和(2 4 6 7 9),实力差最小为1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

部门准备举办一场王者荣耀表演赛,有10名游戏爱好者参与,分为两队,每队5人。每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把10名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队5名队员的评分总和。
现在给你10名参与者的游戏水平评分,请你根据上述要求分队,最后输出这两组的实力差绝对值。
例:10名参赛者的评分分别为5 1 8 3 4 6 7 10 9 2,分组为(1 3 5 8 10)(2 4 6 7 9),两组实力差最小,差值为1。有多种分法,但实力差的绝对值最小为1。

输入

10个整数,表示10名参与者的游戏水平评分。范围在[1, 10000]之间

输出

1个整数,表示分组后两组实力差绝对值的最小值。

示例1

输入

1 2 3 4 5 6 7 8 9 10

输出

1

说明

10名队员分成两组,两组实力差绝对值最小为1。

此为分隔符,请忽略

i w N U J
r j o S
g J c Q X
a Z P
A Z B k U O N
H P M b
C S Q S h o
n P F k T M s
y A W y Y R
o K w
T c n J
Z f v G g A r c n n
s k y B p n
z m d m H g
M U r
V L K u h
P I T Z L h x Q
r n h T k z y
n N M
r f Z r f


实现代码

def calc(pos, a1, a2, arr, t):
    if len(a1) == 5:
        val = abs(t - (2 * sum(a1)))
        a2.append(val)
        return val
    for i in range(pos, len(arr)):
        a1.append(arr[i])
        calc(i + 1, a1, a2, arr, t)
        a1.pop(-1)
    return min(a2)


def main():
    arr = list(map(int, input().split()))
    total = sum(arr)
    a1, a2 = [], []

    res = calc(0, a1, a2, arr, total)
    print(res)


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值