好的,我正在进行C ++在线挑战,我必须通过了解他们的比赛(赢,输,等等)来计算球队的得分。
程序输入如下:
3
4 0 1
2 0 2
0 1 4
我必须以最高分数输出球队的分数。
在这种情况下,4x3 = 12是最高的,因此输出应为12。
到目前为止我的代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int a[150],b[150],c[150];
for(int i=0;i<n;i++)
{
cin >> a[i] >> b[i] >> c[i];
}
sort(a,a+n);
sort(b,b+n);
sort(c,c+n);
int temp;
if(a[0]>b[0])
{
temp=a[0];
a[0]=b[0];
b[0]=temp;
}
if(b[0]>c[0])
{
temp=b[0];
b[0]=c[0];
c[0]=temp;
}
if(c[0]>a[0])
{
temp=c[0];
c[0]=a[0];
a[0]=temp;
}
cout << a[0] << endl;
cout << b[0] << endl;
cout << c[0] << endl;
cout << a[0]*3 << endl;
return 0;
}
我知道它看起来很糟糕......我不确定下一步该做什么。
答案 0 :(得分:0)
为什么不创建一个能够赢得关系和损失的结构。
这样您就可以定义operator<
现在,您正在单独对胜利关系和损失进行排序,这意味着数据不会保持在一起。
struct TeamInfo
{
int mWins;
int mTies;
int mLosses; //don't actually use this value but makes it easier to read
//declare the operator< between two TeamInfo structs
bool operator<(const TeamInfo & other);
};
//This function allows us to compare two TeamInfo structs.
bool TeamInfo::operator<(const TeamInfo & other)
{
int myValue = mWins * 3 + mTies * 1;
int otherValue = other.mWins * 2 + other.mTies * 1;
return myValue < otherValue;
}
//an example:
int main(int argc, char ** argv)
{
TeamInfo teamA;
TeamInfo teamB;
teamA.mWins = 3;
teamA.mTies = 2;
teamA.mLosses = 0;
teamB.mWins = 0;
teamB.mTies = 2;
teamB.mLosses = 3;
//the < here is the same as going teamA.operator<(teamB);
//which will return false because teamA is better than teamB
bool teamAIsBetter = teamA < teamB;
//sort uses operator< so you could put these structs into an array and call sort
return 0;
}
然后,您可以对这些结构进行排序。
答案 1 :(得分:-1)
对于每个团队,计算match_wins * 3 + draw * 1,并找到最高的一个是好的。我认为没有必要对数组进行排序。 部分代码可能如下所示:
int highest_score = -1;
for(int i = 0 ; i < n ; ++ i){
if( a[i] * 3 + c[i] > highest_score ){
highest_score = a[i] * 3 + c[i] ;
}
}
cout << highest_score << endl;
输出应该只是最高分吗?而你似乎输出了4个值。