世界杯进行中……
小明是个不太热心的球迷,收集了一些球赛的比赛信息,请你统计各个球队的进球数,并要求按球队名的字典序(升序)输出各球队名和进球数。
输入格式:
首先输入一个整数T,表示后面有T组测试数据。
每组测试数据先输入1个整数n(1<=n<=20),表示共有n场比赛的信息,接下来的n行中每行输入2个队名 name1,name2(长度不超过10且只包含英文字母)和2个整数a,b(0<=a,b<=10),表示name1与name2的进球数分别是 a和b。
输出格式:
对于每组测试,按球队名的字典序输出各球队名和进球数,每个球队的输出占一行。
输入样例:
1
2
dm rb 1 3
kml hl 1 2
输出样例:
dm 1
hl 2
kml 1
rb 3
方法1:
#include <stdio.h>
typedef struct{
char name[11];
int kicks;
}team;
int teamSort(team Teams[],int len)
{
int i, j;
team temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++){
if (strcmp(Teams[j].name,Teams[j+1].name)>0) {
temp = Teams[j];
Teams[j] = Teams[j + 1];
Teams[j + 1] = temp;
}
}
}
int main()
{
team Teams[40];
//memset(Teams,0,sizeof(team)*40);
for( int i = 0; i < 40; i++ )
{
Teams[i].kicks = -1;
strcpy(Teams[i].name , "xxx");
}
int T = 0;
int tmCnt = 0;
int n = 0;
int isnew1,isnew2;
char tmname1[11];
char tmname2[11];
int kick1,kick2;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (int j = 0; j < 2*n ; j+=2)
{
scanf("%s%s%d%d",tmname1,tmname2,&kick1,&kick2);
//用tmname查一下是否有新队参加;
for (int i = 0; i < 2*n;i++)
//对Temas进行遍历;
{
isnew1 = 1;
isnew2 = 1;
if (strcmp(tmname1,Teams[i].name) == 0)
{
Teams[i].kicks = Teams[i].kicks + kick1;
isnew1 = 0;
break;
}
}
for( int i = 0; i < 2*n; i++){
if (strcmp(tmname2,Teams[i].name) == 0)
{
Teams[i].kicks = Teams[i].kicks + kick2;
isnew2 = 0;
break;
}
}
//如果tmname是新的,通过isnew判断,并且放到最后;
if (isnew1 == 1)
{
Teams[tmCnt].kicks = kick1;
strcpy(Teams[tmCnt].name,tmname1);
tmCnt++;
}
if (isnew2 == 1)
{
Teams[tmCnt].kicks = kick2;
strcpy(Teams[tmCnt].name,tmname2);
tmCnt++;
}
}
teamSort(Teams,tmCnt);
for(int j = 0; j < tmCnt; j++){
printf("%s %d",Teams[j].name,Teams[j].kicks);
if (j < tmCnt - 1)
printf("\n");
}
}
return 0;
}
方法2:
#include <stdio.h>
#include <string.h>
struct qiu
{
char name[11];
int score;
};
void sort(struct qiu arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (strcmp(arr[j].name, arr[j + 1].name) > 0)
{
struct qiu temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n;
scanf("%d", &n);
struct qiu sb[2 * n];
for (int i = 0; i < 2 * n; i += 2)
{
scanf("%s %s %d %d", sb[i].name, sb[i + 1].name, &sb[i].score, &sb[i + 1].score);
}
sort(sb, 2 * n);
for (int i = 0; i < 2 * n;)
{
int j = i + 1;
while (j < 2 * n && strcmp(sb[j].name, sb[i].name) == 0)
{
sb[i].score += sb[j].score;
j++;
}
printf("%s %d\n", sb[i].name, sb[i].score);
i = j;
}
}
return 0;
}