您的位置:首页 > 游戏 > 游戏 > 华为机考真题 -- 游戏分组

华为机考真题 -- 游戏分组

2024/10/6 22:18:49 来源:https://blog.csdn.net/qq_25360769/article/details/140306824  浏览:    关键词:华为机考真题 -- 游戏分组

题目描述:

部门准备举办一场王者荣耀表演赛,有 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。

C++源码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
using namespace std;int minDiff = INT_MAX;// 将单行输入转换为整数数组的辅助函数
vector<int> string2intarray() {string str;getline(cin, str);istringstream iss(str);vector<int> nums;int num;for (int num; iss >> num;)nums.push_back(num);return nums;
}void backtrack(vector<int>& nums, vector<bool>& used, int idx, int teamSum1, int teamSum2) {if (idx == nums.size()) {minDiff = min(minDiff, abs(teamSum1 - teamSum2));return;}// 尝试将当前选手加入第一队backtrack(nums, used, idx + 1, teamSum1 + nums[idx], teamSum2);// 尝试将当前选手加入第二队backtrack(nums, used, idx + 1, teamSum1, teamSum2 + nums[idx]);
}int main() {//vector<int> nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };vector<int> nums = string2intarray();vector<bool> used(nums.size(), false);backtrack(nums, used, 0, 0, 0);cout << minDiff << endl;system("pause");return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com