I do not understand what to do with this problem. Getting WA continuously.
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct{
char name[32];
int point;
int numGame;
int numWin;
int numTie;
int numLoss;
int goalScored;
int goalAgainst;
}team;
int compare_function(const void *a,const void *b){
team *x = (team *) a;
team *y = (team *) b;
if( x->point != y->point ){
//printf("For points between %s and %s\n",x->name,y->name);
return y->point - x->point;
}
else if (x->numWin != y->numWin){
//printf("For wins between %s and %s\n",x->name,y->name);
return y->numWin - x->numWin;
}
else if( (x->goalScored-x->goalAgainst) != (y->goalScored - y->goalAgainst) ){
//printf("For goalDifference between %s and %s\n",x->name,y->name);
return (y->goalScored-y->goalAgainst) - (x->goalScored - x->goalAgainst);
}
else if( x->goalScored != y->goalScored){
//printf("For goal Scored between %s and %s\n",x->name,y->name);
return y->goalScored - x->goalScored;
}
else if( x->numGame != y->numGame ){
//printf("For number of game between %s and %s\n",x->name,y->name);
return x->numGame - y->numGame;
}
else{
int i;
char first[32],second[32];
for( i = 0 ; i < strlen(x->name) ; i++ )
first[i] = tolower(x->name[i]);
for( i = 0 ; i < strlen(y->name) ; i++ )
second[i] = tolower(y->name[i]);
//printf("For lex order between %s and %s\n",x->name,y->name);
return !strcmp(first,second);
}
}
int ConvertInt(char *str){
int i,j,len = strlen(str),k=0,sum=0;
for( i = len - 1 ; i >= 0 ; i--){
int temp = 1;
for( j = 0 ; j < k ; j++ )
temp *= 10;
sum += temp * (str[i]-'0');
k++;
}
return sum;
}
int main(){
int numTournament; //0<N<1000
char TournamentName[102]; // < 100 char
int numTeam; //1 < T <= 30 , then T lines
int numMatch;
team *Team;
int cases,count=0;
int i,j;
char Team1[32],Team2[32],Goal1[3],Goal2[3];
int NumGoal1,NumGoal2;
scanf("%d",&cases);
while(count++ < cases){
if(count > 1)
printf("\n");
scanf("%*c%[^\n]",TournamentName);
scanf("%*c%d%*c",&numTeam);
//printf("%s %d\n",TournamentName,numTeam);
Team = new team[numTeam];
for( i = 0 ; i < numTeam ; i++){
scanf("%[^\n]%*c",Team[i].name);
Team[i].point = Team[i].numGame = Team[i].numWin = Team[i].numTie = Team[i].numLoss = Team[i].goalScored =
Team[i].goalAgainst = 0;
}
scanf("%d",&numMatch);
for( i = 0 ; i < numMatch ; i++ ){
scanf("%*c%[^#]%*c%[0-9]%*c%[0-9]%*c%[^\n]",Team1,Goal1,Goal2,Team2);
NumGoal1 = ConvertInt(Goal1);
NumGoal2 = ConvertInt(Goal2);
//printf("Team1 %s, goal %d,Team2 %s, goal %d\n",Team1,NumGoal1,Team2,NumGoal2);
for( j = 0 ; j < numTeam ; j++){
if(!strcmp(Team1,Team[j].name)){
Team[j].goalScored += NumGoal1; Team[j].goalAgainst += NumGoal2; Team[j].numGame++;
if(NumGoal1 > NumGoal2)
Team[j].numWin++,Team[j].point+=3;
else if(NumGoal1 == NumGoal2)
Team[j].numTie++,Team[j].point+=1;
else Team[j].numLoss++;
}
else if(!strcmp(Team2,Team[j].name)){
Team[j].goalScored += NumGoal2; Team[j].goalAgainst += NumGoal1; Team[j].numGame++;
if(NumGoal2 > NumGoal1)
Team[j].numWin++,Team[j].point+=3;
else if(NumGoal1 == NumGoal2)
Team[j].numTie++,Team[j].point+=1;
else Team[j].numLoss++;
}
else;
}
}
qsort(Team,numTeam,sizeof(team),compare_function);
printf("%s\n",TournamentName);
for( i = 0 ; i < numTeam ; i++)
printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",i+1,Team[i].name,Team[i].point,Team[i].numGame,Team[i].numWin,Team [i].numTie,Team[i].numLoss,Team[i].goalScored-Team[i].goalAgainst,Team[i].goalScored,Team[i].goalAgainst);
}
return 0;
}
Thanks.