2024年华为OD机试真题-王者荣耀-(C++/Java/python)-OD统一考试(C卷D卷)

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 

题目描述

部门准备举办一场王者荣耀表演赛,有 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 2 3 4 5 6 7 8 9 10

输出

1

说明

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

考点

排列组合

解题思路

1.采用递归的方式,通过枚举加入和不加入该参与者的评分,在每组的人数达到

5人时,计算两组实力差的绝对值,一直更新取最小差值。

代码

c++
#include <bits/stdc++.h>
using namespace std;
int sum=0;
int res=INT32_MAX;
 
void dfs(vector<int> vec, int ind, int cnt, int total) {
    if(cnt==5) {
        int other=sum-total;
        res=min(abs(total-other), res);
        return;
    }
    if(ind==10) {
        return;
    }
    dfs(vec, ind+1, cnt+1, total+vec[ind]);
    dfs(vec, ind+1, cnt, total);
}
 
int main() {
    int tmp;
    vector<int> vec;
    while(cin>>tmp){
        vec.push_back(tmp);
        sum+=tmp;
        if(cin.get()=='\n') break;
    }
    dfs(vec, 0, 0, 0);
    cout<<res<<endl;
    system("pause");
    return 0;
}
java
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dijkstra2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值