7-7 进球统计

文章描述了如何使用C++编程语言实现一个程序,统计世界杯比赛中的球队进球数,并按照球队名称的字典顺序输出。提供了两种方法,一种是使用结构体和冒泡排序,另一种是使用结构体和直接插入排序。
摘要由CSDN通过智能技术生成

世界杯进行中……
小明是个不太热心的球迷,收集了一些球赛的比赛信息,请你统计各个球队的进球数,并要求按球队名的字典序(升序)输出各球队名和进球数。

输入格式:

首先输入一个整数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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值