通过了解他们在C中的胜利/比赛来计算足球队的得分

时间:2013-02-24 22:04:54

标签: c++ arrays

好的,我正在进行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;
}

我知道它看起来很糟糕......我不确定下一步该做什么。

2 个答案:

答案 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个值。