c - 找出多组数字之间的最大差异

标签 c arrays

我尝试创建一个程序来处理足球比赛的结果列表,同时也处理结果。

我的程序的工作方式是输入已进行的比赛数量,然后列出每场比赛的结果。

列表中的每一行均采用 HOME_TEAM_ID | 的形式。 AWAY_TEAM_ID | HOME_TEAM_GOALS | 主页_团队_目标AWAY_TEAM_GOALS

例如,如果用户输入(第一行是匹配数):

2
0 1 5 0 
2 3 0 5

然后我的程序会输出一行内容:球队编号、胜率、主场胜率、获胜场次的平均分差(如果没有主场比赛则为-1。)最大(以分差计)在一场比赛中获胜,然后是该对手的 ID。

0 1.000 1.000 5.000 
1 0.000 -1 -1 
2 0.000 0.000 -1 
3 1.000 -1 5.000 

我已经完成了大部分程序,但在实现最后一部分时遇到了困难。我想找出每支球队在单场比赛中最大的胜利(以净胜球计算),然后找出他们以净胜球计算最大胜利的对手的ID。 (如果没有任何胜利,那么它应该简单地输出 -1。)

我的第一个想法是循环遍历数组,将变量设置为最大的胜利。对于每个元素,检查其点差是否高于变量。如果是,则用当前元素的差值替换该变量。

但是我遇到了编译器错误。

1079.c: In function 'main':
1079.c:153:11: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
   maximum = resultTable[0];
           ^
1079.c:157:24: warning: comparison between pointer and integer
     if (resultTable[n] > maximum)
                        ^
1079.c:159:17: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
        maximum  = resultTable[n];

任何有关如何在多场比赛中针对某一特定对手找到最大平均分差的帮助,我们将不胜感激。

这是我的完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//My local variables
int n;
int i;
int input = 0;
int TEAM_ID = 0, NUM_OF_GAMES = 1, WINS = 3, HOME_GAMES = 2, HOME_WINS = 4, HOME_WIN_RATIO = 6, WIN_RATIO = 5, GD = 7;
int homeTeamID, awayTeamID, homeGoals, awayGoals;

static const int NUM_COLUMNS = 10;
static const int NUM_TEAMS = 30;
double resultTable[30][10];
int BEST_WIN_DIFF = 8, BEST_WIN_OPPONENT = 9;



void takeInput();
void sortData();
void printer();
//This method takes the input from the user for homeTeamID, awayTeamID,homeGoals and awayGoals
void takeInput()
{
    scanf("%d", &input);
    for (n = 0; n < input; n++) {
        scanf("%d %d %d %d", &homeTeamID, &awayTeamID, &homeGoals, &awayGoals);
        //calls the sortData function
        sortData();
    }
}
//The table fnction which uses the resultTable variable to put the infomation in a table



void sortData()
{

    int goalDiff = homeGoals - awayGoals;


    //This will increment the home games,home game counter and the away game
    resultTable[homeTeamID][NUM_OF_GAMES]++;
    resultTable[homeTeamID][HOME_GAMES]++;
    resultTable[awayTeamID][NUM_OF_GAMES]++;
    //If the awaygoals is larger than the homegoals then it will set the winner in the results table
    if (homeGoals < awayGoals) {
        resultTable[awayTeamID][WINS]++; //increment away wins
    }
    //If the homegoals is larger than the awaygoals then it will set the winner in the results table
    else if (homeGoals > awayGoals) {
        resultTable[homeTeamID][WINS]++;
        resultTable[homeTeamID][HOME_WINS]++; //increment home wins
    }
    //The goal difference for home and away
    resultTable[homeTeamID][GD] = resultTable[homeTeamID][GD] + (homeGoals - awayGoals);
    resultTable[awayTeamID][GD] = resultTable[awayTeamID][GD] + (awayGoals - homeGoals);



      if (goalDiff > resultTable[homeTeamID][BEST_WIN_DIFF]) {
        resultTable[homeTeamID][BEST_WIN_DIFF] = goalDiff;
        resultTable[homeTeamID][BEST_WIN_OPPONENT] = awayTeamID;
    }
    if (-goalDiff > resultTable[awayTeamID][BEST_WIN_DIFF]) {
        resultTable[awayTeamID][BEST_WIN_DIFF] = -goalDiff;
        resultTable[awayTeamID][BEST_WIN_OPPONENT] = homeTeamID;
    }
}





//Calculates the win ratio
void winRatio()
{
    for (n = 0; n < 30; n++) {

        //This if determines the home win ratio
        if (resultTable[n][HOME_GAMES] > 0) {

            resultTable[n][HOME_WIN_RATIO] = resultTable[n][HOME_WINS]
                / resultTable[n][HOME_GAMES];
        }
        if (resultTable[n][NUM_OF_GAMES] > 0) {

            resultTable[n][GD] = resultTable[n][GD] / resultTable[n][NUM_OF_GAMES];
        }

        //This if determines the win ratio
        if (resultTable[n][NUM_OF_GAMES] > 0) {

            resultTable[n][WIN_RATIO] = resultTable[n][WINS]
                / resultTable[n][NUM_OF_GAMES];
        }
    }
}






//This method prints out the results
void printer()
{
    for (n = 0; n < NUM_TEAMS; n++) {
        if (resultTable[n][NUM_OF_GAMES] != 0) {
            if (resultTable[n][HOME_WIN_RATIO] == -1) {
                printf("%d %.3f %.0f %.3f %.0f %.0f\n", n,
                    resultTable[n][WIN_RATIO],
                    resultTable[n][HOME_WIN_RATIO],
                    resultTable[n][GD],
                    resultTable[n][BEST_WIN_DIFF],
                    resultTable[n][BEST_WIN_OPPONENT]);
            }
            else {
                printf("%d %.3f %.3f %.3f %.0f %.0f\n", n,
                    resultTable[n][WIN_RATIO],
                    resultTable[n][HOME_WIN_RATIO],
                    resultTable[n][GD],
                    resultTable[n][BEST_WIN_DIFF],
                    resultTable[n][BEST_WIN_OPPONENT]);
            }    
        }
    }
}
//My main function which will be used to call everyother function
int main(void)
{
     for (n = 0; n < NUM_TEAMS; n++) {
        for (i = 1; i < NUM_COLUMNS; i++) {
            resultTable[n][i] = 0;
        }

        resultTable[n][TEAM_ID] = n;
        resultTable[n][HOME_WIN_RATIO] = -1;
        resultTable[n][BEST_WIN_DIFF] = -HUGE_VAL;

    }


  int maximum, location = 1;



  for (n = 0; n < 30; n++)


    scanf("%d", &resultTable[n]);

  maximum = resultTable[0];

  for (n = 0; n < 30; n++)
  {
    if (resultTable[n] > maximum)
    {
       maximum  = resultTable[n];
       location = n+1;
    }
  }

  printf("Maximum element is present at location %d and it's value is %d.\n", location, maximum);
  return 0;



    takeInput();
    winRatio();
    printer();
    return EXIT_SUCCESS;
}

最佳答案

您无法从输入数组的数据中获取所需的信息(最大的信息等),因为您丢弃了稍后计算所需的信息。

您需要将输入数据不变地存储到数组中,然后您可以从中计算出您想要的任何内容。

特别是,

    //The goal difference for home and away
    resultTable[homeTeamID][GD] = resultTable[homeTeamID][GD] + (homeGoals - awayGoals);
    resultTable[awayTeamID][GD] = resultTable[awayTeamID][GD] + (awayGoals - homeGoals);

你记得差异,但这不足以计算每支球队单场比赛的最大胜利。相反,请存储 homeGoalsawayGoals,然后计算您想要的信息。

关于c - 找出多组数字之间的最大差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45551517/

相关文章:

c - C 中使用链表实现堆栈

c - C语言回合制聊天程序

c - 如何将 main 与 made 库链接起来?

c# - 将 linq 查询转换为字符串数组 - C#

javascript - 将多个 http.requests 中的数组组合成一个数组

c - 从终端读取 input.txt 文件和 output.bmp 文件(C 编程)

c - 'while' 在这个程序中做什么?

python - NumPy 数组的大小

c++ - 我可以在 C++ 中创建不同大小的 vector 数组吗?

c - 在 C 中的结构中初始化 const 数组?