湖南大学 实验八 火星人足球赛
【问题描述】火星人足球赛的比赛规则与地球人的比赛规则有些非常相似,比如严重犯规,将被给予黄牌警告,特别严重的犯规,将给予红牌直接罚下,如果有人得到第2张黄牌,则自动获得红牌罚下,比赛同样采取主客场制。与地球人足球赛不同的是,火星人足球赛每队可以上场的人数不会固定为11人,可以多个人,比赛时间也会更长一些。比赛时的裁判员是机器人,判罚非常严厉,如果有人获得红黄牌,机器人裁判将自动记录当时的情况。【输
【问题描述】
火星人足球赛的比赛规则与地球人的比赛规则有些非常相似,比如严重犯规,将被给予黄牌警告,特别严重的犯规,将给予红牌直接罚下,如果有人得到第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>
#include<string>
using namespace std;
struct Record//犯规记录
{
int time;
char team;
int number;
char color;
};
struct Red//红牌犯规记录
{
char team;
int number;
int time;
};
int main()
{
string str1,str2;//用于存储参赛双方的队名
cin>>str1;
cin>>str2;
int n;
cin>>n;
Record p[n];
Red q[n];//声明的长度n为红牌记录的最多次数
int t=0;
for(int i=0;i<n;i++)
{
cin>>p[i].time>>p[i].team>>p[i].number>>p[i].color;
}
int f=0;
for(int j=0;j<n;j++)
{
if(p[j].color=='y')
{
for(int k=0;k<j;k++)//检索该名队员之前是否出现过黄牌犯规记录而构成红牌犯规
{
if(p[j].number==p[k].number&&p[j].team==p[k].team)
{
q[t].team=p[j].team;
q[t].number=p[j].number;
q[t].time=p[j].time;
t++;
f=1;
}
}
}
else if(p[j].color=='r')//红牌犯规直接出局
{
q[t].team=p[j].team;
q[t].number=p[j].number;
q[t].time=p[j].time;
t++;
f=1;
}
}
if(f==0) {cout<<"No Red Card"<<endl;}
else
{
for(int k=0;k<t;k++)//处理同时间同队伍的红牌犯规成员记录按编号大到编号小的顺序输出、主队在前副队在后
{
for(int c=k+1;c<t;c++)
{
Red temp;
if(q[k].time==q[c].time)
{
if(q[k].team==q[c].team&&k<t&&q[k].number<q[c].number)
{
temp=q[k];q[k]=q[c];q[c]=temp;
}
else if((q[k].team=='h'&&q[c].team=='a'&&k>t)||(q[k].team=='a'&&q[c].team=='h'&&k<t))
{
temp=q[k];q[k]=q[c];q[c]=temp;
}
}
}
}
for(int i=0;i<t;i++)
{
if(q[i].team=='h') {cout<<str1<<' '<<q[i].number<<' '<<q[i].time<<endl;}
else if(q[i].team=='a') {cout<<str2<<' '<<q[i].number<<' '<<q[i].time<<endl;}
}
}
return 0;
}
我学到了结构体定义可以按照出入输出的格式,便于进行数据处理,虽然看起来比较笨。
更多推荐
所有评论(0)