-1

好的,我正在做一个 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;
}

我知道它看起来很糟糕。我不知道下一步该怎么做。

4

2 回答 2

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;
}

然后,您可以对这些结构调用 sort。

于 2013-02-24T22:30:15.103 回答
-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 个值。

于 2013-02-25T02:18:36.457 回答