【练习八 结构体(强化)编程题5. 火星人足球赛】

【问题描述】

       火星人足球赛的比赛规则与地球人的比赛规则有些非常相似,比如严重犯规,将被给予黄牌警告,特别严重的犯规,将给予红牌直接罚下,如果有人得到第2张黄牌,则自动获得红牌罚下,比赛同样采取主客场制。

       与地球人足球赛不同的是,火星人足球赛每队可以上场的人数不会固定为11人,可以多个人,比赛时间也会更长一些。

       比赛时的裁判员是机器人,判罚非常严厉,如果有人获得红黄牌,机器人裁判将自动记录当时的情况。       

【输入形式】

       输入的第一行为主队队名,第二行为客队队名,队名的长度不超过20个字符。

       第三行为一个整数 n (0 ≤ n ≤ 90) ,表示得到红黄牌的犯规次数。

       接下来的n行,每行包含用空格分隔的4个部分,表示犯规的情况:

    • 首先为一个整数,表示犯规的时间(分钟)

    • 接着为一个字符"h"或"a",如果为"h",表示该张牌会给到主队球员,否则会给到客队球员

    • 接下来为球员编号m  (1 ≤ m ≤ 99)

    • 接下来为一个字符"y"或"r",如果为"y",表示为黄牌,否则为红牌

       不同球队的球员可能有相同的号码,在同一球队球员的号码不相同,犯规记录按时间顺序排列。

【输出形式】

       输出按时间顺序排列的获得红牌的记录,如果时间相同,则主队排在前面,如果同一时间同一球队有多人获得红牌,则编号大的排在前面。每个红牌一行,包含3个部分:球员所属球队的名字、犯规球员编号、获得红牌时间。

      如果全场比赛无红牌,输出"No Red Card"
【样例输入】

MC
CSKA
9
28 a 3 y
62 h 25 y
66 h 42 y
70 h 25 y
77 a 4 y
79 a 25 y
82 h 42 r
89 h 16 y
90 a 13 r

【样例输出】

MC 25 70
MC 42 82
CSKA 13 90

【样例说明】
【评分标准】

【说明】注意补充条件“如果时间相同,则主队排在前面,如果同一时间同一球队有多人获得红牌,则编号大的排在前面”

#include <iostream>

using namespace std;

struct team{
    int time;
    char Team;
    int person;
    char color;
};
int main()
{
    string H,A;
    cin>>H>>A;
    int n,K=0;
    cin>>n;
    team*T=new team[n];
    int j,i;
    for(j=0;j<n;j++)
    {
        cin>>T[j].time>>T[j].Team>>T[j].person>>T[j].color;
    }
    for(j=1;j<n;j++)//补充条件的完善
    {
        for(i=0;i<j;i++)
        {
            if(T[j].time==T[i].time&&T[i].Team=='a'&&T[j].Team=='h')
            {
                team A=T[j];T[j]=T[i];T[i]=A;
            }
            else if(T[j].time==T[i].time&&T[i].Team==T[j].Team)
            {
                if(T[j].person>T[i].person)
                {
                    team A=T[j];T[j]=T[i];T[i]=A;
                }
            }
        }
    }
    for(j=0;j<n;j++)
    {
        if(T[j].color=='r')
        {
            K=1;
            if(T[j].Team=='h')
            {

                cout<<H<<" "<<T[j].person<<" "<<T[j].time<<endl;
            }
            else
            {
                cout<<A<<" "<<T[j].person<<" "<<T[j].time<<endl;
            }
        }
        else
        {
            for(i=0;i<j;i++)
            {
                if(T[j].person==T[i].person&&T[j].Team==T[i].Team)
                {
                    K=1;
                    if(T[j].Team=='h')
                    {
                        cout<<H<<" "<<T[j].person<<" "<<T[j].time<<endl;
                    }
                    else
                    {
                        cout<<A<<" "<<T[j].person<<" "<<T[j].time<<endl;
                    }
                }
            }
        }
    }
    if(K==0)
    {
        cout<<"No Red Card";
    }
    return 0;
}

结构体在C语言中是一种用户自定义的数据类型,它可以包含多个不同类型的数据成员,用于表示一个实体的集合。文件编程题涉及读取和写入文件的操作。 在结构体与文件编程题中,常见的场景是将结构体数据写入文件或从文件中读取结构体数据。 实现将结构体数据写入文件的步骤如下: 1. 首先定义一个结构体类型,包含所需的数据成员。 2. 打开文件,使用fopen函数打开文件,并指定打开模式,如写入模式“w”或追加模式“a”。 3. 使用fwrite函数将结构体数据写入文件。需要指定写入的数据地址、每个数据的大小和写入的数量。 4. 关闭文件,使用fclose函数关闭文件。 若要从文件中读取结构体数据,可以按以下步骤进行: 1. 定义一个结构体类型,与写入时使用的结构体类型相同。 2. 打开文件,使用fopen函数打开文件,并指定打开模式,如读取模式“r”。 3. 使用fread函数从文件中读取结构体数据。需要指定读取的数据地址、每个数据的大小和读取的数量。 4. 关闭文件,使用fclose函数关闭文件。 以上是结构体与文件编程题的基本步骤,根据具体情况,还可以在读取或写入文件的过程中进行其他相关的处理,如判断文件是否打开成功、是否读取或写入成功等。 总之,结构体与文件编程题是C语言中常见的考察点,需要掌握结构体的定义和使用,以及文件操作函数的应用。通过实际的编程练习,可以进一步加深对这两个方面的理解和掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值