分析和排序足球联赛球队 C++

Analyse and order football league teams c++

我正在想出以非常具体的顺序显示足球联赛获胜者的最佳解决方案。 问题如下:

您输入参加比赛的球队数量。然后您以矩阵形式输入所有球队的得分(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

这是一个比我过去处理的问题更复杂的问题(这很好)。 我遇到的问题是我无法决定如何处理订购系统。我认为最好的办法是将得分、完成的目标和收到的目标保存在另一个矩阵中,但我不知道如何排序它们。为了分析分数,我想我会做一个具有不同功能的 draw/win/lose 工作流程来了解我必须保存哪些点,首先垂直通过矩阵(跳过主对角线)然后水平。我应该如何处理排序系统然后显示排名 table?另一个矩阵是否是存储点数、目标的最佳解决方案?

这是我目前设法完成的简单代码:

#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:我不是在寻找完整的解决方案,因为这是作业,但我很迷茫,希望得到一些 tips/recommendations。

您应该在使用 C++ 编码时尝试使用 class。它们确实有助于将您的问题分解成更容易理解、测试和使用的小块。

针对你的问题,我会创建一个 class 团队:

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

我把所有的东西都写成 public 作为一个最小的答案,你可能想要一个更完整的 class,也许用 operator>> 来解码它,等等......然后你可以创建此类型的 operator< 将帮助您进行排序:

bool operator<(Team &lh, Team &rh)
{
    // return true if lh is less good than rh
}

那么排序就是对一个向量调用 sort 的问题:

std::vector<Team> teams;
// Read your class and fill teams
std::sort(teams.begin(), teams.end());