我正在尝试找到最佳解决方案,以非常特定的顺序展示足球联赛的获胜者。
问题如下:

您输入参加比赛的队伍数。然后,您以矩阵形式输入所有球队的得分(mi,j =(x,y)表示球队i进球x进球,球队j得分y)。

所需的输出将是具有以下信息的团队排名列表:团队编号,团队积分,完成的团队目标,收到的团队目标。首先将为该团队分配更多的积分,如果两个团队拥有相同的积分,则第一个将是具有最佳进球差(完成-获得)的团队,如果相同,则顺序将是该团队的数量。如果您赢了,您将获得3分,如果您被平手,您将获得1分。

Sample input
4
0 0   1 0   2 1   0 2
2 2   0 0   3 3   1 3
1 1   1 2   0 0   3 2
1 0   0 1   2 3   0 0
Sample output
4 9 10 8
3 8 12 12
1 8 6 7
2 8 9 10

这是一个比我以前要解决的问题更复杂的问题(很棒)。
我遇到的问题是我无法决定如何处理订购系统。我认为最好的方法是将要点,完成的目标和收到的目标保存在另一个矩阵中,但是我不知道如何排序。为了分析分数,我想我会使用不同的功能进行绘制/赢/输工作流程,以了解我必须保存的点,首先垂直穿过矩阵(跳过主要对角线),然后水平穿过。我应该如何处理订购系统以显示排名表?另一个矩阵是存储积分,目标的最佳解决方案吗?

这是我目前设法完成的简单代码:
#include <iostream>

#include <vector>

#include <utility>

using namespace std;



bool draw(const vector< vector<pair<int,int>> > &scores, int x, int y)  { // Is it a draw?

    if (scores[x][y].first == scores[x][y].second) return true;

    return false;

}



bool x_win(const vector< vector<pair<int,int>> > &scores, int x, int y) { // Is it a win for team x?

    if (scores[x][y].first > scores[x][y].second) return true;

    return false;

}



void input_pairs_in_matrix(vector< vector<pair<int,int>> > &scores, int n) { // input pairs

    int n1,n2;

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            cin>>n1>>n2;

            pair<int,int> p = make_pair(n1,n2);

            scores[i][j] = p;

        }

    }

}



int main (){

    int n; cin >> n; // number of teams



    vector< vector<pair<int,int>> > scores(n,vector<pair<int,int>>(n)); //matrix of pairs



    input_pairs_in_matrix(scores,n);

}

PD:我不是在寻找整体解决方案,因为这是家庭作业,但是我很迷茫,不胜感激一些技巧/建议。

最佳答案

在C++中进行编码时,应尝试使用class。它们确实有助于将您的问题分解成小块,以便于理解,测试和使用。

对于您的问题,我将创建一个类(class)团队:

class Team
{
    public:
        unsigned int points;
        unsigned int goals_marked;
        unsigned int goals_received;
}

我将所有内容公开为一个最小的答案,您可能想要一个更完整的类,也许使用operator>>对其进行解码,等等...然后,您可以在此类型上创建operator<,这将有助于您进行排序:
bool operator<(Team &lh, Team &rh)
{
    // return true if lh is less good than rh
}

然后排序只是在 vector 上调用sort的问题:
std::vector<Team> teams;
// Read your class and fill teams
std::sort(teams.begin(), teams.end());

09-12 12:01