编程 | 100分]篮球比赛
【篮球比赛】篮球(5V5)比赛中,每个球员拥有一个战斗力,每个队伍的所有球员战斗力之和为该队伍的总体战斗力。现有10个球员准备分为两队进行训练赛,教练希望2
个队伍的战斗力差值能够尽可能的小,以达到最佳训练效果。给出10个球员的战斗力,如果你是教练,你该如何分队,才能达到最佳训练效果?请说出该分队方案下的最小
战斗力差值。
输入描述:
10个篮球队员的战斗力(整数,范围[1,10000]),战斗力之间用空格分隔,如:10987654321
不需要考虑异常输入的场景。
输出描述:
最小的战斗力差值,如:1
示例1
输入
10 9 8 7 6 5 4 3 2 1
输出
1
C++
/*
【篮球比赛】篮球(5V5)比赛中,每个球员拥有一个战斗力,每个队伍的所有球员战斗力之和为该队伍的总体战斗力。现有10个球员准备分为两队进行训练赛,教练希望2
个队伍的战斗力差值能够尽可能的小,以达到最佳训练效果。给出10个球员的战斗力,如果你是教练,你该如何分队,才能达到最佳训练效果?请说出该分队方案下的最小
战斗力差值。
输入描述:
10个篮球队员的战斗力(整数,范围[1,10000]),战斗力之间用空格分隔,如:10987654321
不需要考虑异常输入的场景。
输出描述:
最小的战斗力差值,如:1
示例1:
输入
10 9 8 7 6 5 4 3 2 1
输出
1
*/
#include
using namespace std;
void splits(string& inputs, vector
int main()
{
//暴力破解
string inputs;
getline(cin, inputs);
vector
string pattern = " ";
splits(inputs, input, pattern);
int mi = INT_MAX;
int sum = 0;
for (int i = 0; i < input.size();i++)
{
sum += input[i];
}
for (int i = 0; i < input.size() - 4; i++)
{
for (int j = i + 1; j < input.size() - 3; j++)
{
for (int k = j + 1; k < input.size() - 2; k++)
{
for (int m = k + 1; m < input.size() - 1; m++)
{
for (int n = m + 1; n < input.size(); n++)
{
mi = min(mi,abs(2*(input[i] + input[j] + input[k] + input[m] + input[n]) - sum));
}
}
}
}
}
cout << mi << endl;
system("pause");
return 0;
}
void splits(string& inputs, vector
{
inputs += pattern;
for (int i = 0; i < inputs.length();i++)
{
int pos = inputs.find(pattern, i);
if(pos < inputs.length())
{
string temp = inputs.substr(i,pos - i );
if(!temp.empty() && temp!= pattern)
{
input.push_back(stoi(temp));
}
}
}
}