按照团队获得的分数的顺序排列团队的字符串名称

时间:2018-07-03 11:08:36

标签: c

我在这个项目中应该编写一个代码,以便我们输入参加世界杯比赛的国家(一组,四个国家)的名称以及每个国家的得分。然后,程序必须打印分数,然后将哪两个团队推进到下一个阶段,例如“要晋升的第一个团队是%s”。并打印得分最高的团队的名称,后跟“要晋级的第二个团队是%s”。 ,打印得分第二高的国家/地区。我一辈子都想不出如何编写程序打印哪个国家前进到下一阶段的部分。

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

#define NUMBER 4 

void setTeam(char team[NUMBER][20]) /*Names of team in particular group*/
{ 

 setvbuf(stdout, NULL, _IONBF, 0); 

 int i;
 for(i=0;i<NUMBER;i++){ 
  printf("Enter name of team %d: ", i); 
  scanf("%s", &team[i]); 
 } 

 for(i=0;i<NUMBER;i++){  /*print name of teams entered*/
      printf("team[%d]=\" %s\"\n", i, team[i]); 
 } 
} 

void input(char team[NUMBER][20],int group[NUMBER][7]){  /*Enter goals scored 
to calculate Wins, Draws, Loss, GF, GA, GD and PTS */

  int score_i, score_j;
  int i, j; 
  for(i=0;i<NUMBER-1;i++){ 
      for(j=i+1;j<NUMBER;j++){ 
          printf("%s vs %s\n",team[i],team[j]); 

          printf("%s :",team[i]); scanf("%d", &score_i); 

          group[i][3] += score_i;

          printf("%s :",team[j]); scanf("%d", &score_j); 

          group[j][3] += score_j;

          group[i][4] += score_j;
          group[j][4] += score_i;

          if (score_i == score_j)
          {
                group[i][1] += 1;
                group[j][1] += 1;
          } else if (score_i > score_j) {
               group[i][0] += 1;
               group[j][2] += 1;
          } else {
               group[j][0] += 1;
               group[i][2] += 1;
          }

          group[i][5] += judge(score_i, score_j);
          group[j][5] += judge(score_j, score_i);
          group[i][6] = group[i][3] - group[i][4];
          group[j][6] = group[j][3] - group[j][4];
      } 
  }
} 

int judge(int gain, int loss)
{

   if (gain == loss || loss == gain)
        return 1;
   else if (gain > loss)
        return 3;
   else
       return 0;
 } 

int display(char team[NUMBER][20], int group[NUMBER][7])
{ /*Print results*/

  puts("\n\tTeam, \t\tWin,    Draws,   Loss,    GF,    GA,     GD,    PTS");  

  int i, j;  

  for(i=0;i < NUMBER;i++){  

      printf("\t%-10s,\t%3d,\t%8d,\t%d,\t%2d,\t%3d,\t%5d,\t%9d\n", 
      team[i],group[i][0],group[i][1],group[i][2],group[i][3],group[i] 
      [4],group[i][5],group[i][6]); 
  } 
  putchar('\n');
} 

void advance(char team[][20], int group[][7])
{ /*Identify top 2 teams to advance and print name of teams */

  int i, j;
  int max;
  char temp[NUMBER][20];

  puts("\tAdvance");

  for(i = 0; i < NUMBER; i++) {
        for(j = i + 1; j < NUMBER; j++) {
                if (group[i][3] < group[j][3]) {
                     max = group[i][3];
                     group[i][3] = group[j][3];
                     group[j][3] = max;

                 }
        }
   }


}



int main(void)
{ 

 int group[NUMBER][7] = {0}; 
 int i,j; 
 char team[NUMBER][20]; 

 setTeam(team); 
 input(team, group); 
 display(team, group); 
 advance(team, group);

 return 0; 
} 

1 个答案:

答案 0 :(得分:0)

您应该根据获得的积分数来比较球队。我通过分配第一和第二小组为下一阶段的候选人来初始化状态。之后,您要做的就是比较是否有其他得分更高的球队。如果您发现新的最高分,则需要重新分配第一和第二队。如果您找到了新的第二名候选人,则只需重新分配第二名。

void advance(char team[][20], int group[][7])
{ /*Identify top 2 teams to advance and print name of teams */

  int i, j;
  int max;

  int max_id = 0;
  int max_id_prev = 1;

  puts("\tAdvance");

  for(i = 1; i < NUMBER; i++) {
    if (group[max_id][5] < group[i][5]) {
       max_id_prev = max_id;
       max_id = i;
       continue;
    }
    if (group[max_id_prev][5] < group[i][5]) {
       max_id_prev = i;
    }
   }
  printf("%s", team[max_id]);
  printf("%s", team[max_id_prev]);
}

请考虑对您的代码进行同行审查,或将您的代码发布在Code review上。还可以考虑使用结构来组织代码,以表示您拥有的数据。它将提高可读性。有很多关于如何编写清晰易读的代码的书。