-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 に答える