湖大CG满分教程:作业训练一编程题作业训练一编程题6. 世界杯来了

【问题描述】

       2018年俄罗斯世界杯结束了,法国获得冠军,全世界球迷度过了一个非常愉快的夏天。作为中国球迷,不能总是看别人踢球,这不福利来了,根据FIFA(国际足联)及全体成员协会的一致决定,2118年世界杯将在中国举办,作为东道主,中国队将无需参加预选赛而直接参加决赛阶段的比赛。

   比赛规则如下:

  • 总共n(n为偶数)个球队参加比赛

  • 按照分组赛积分排名,前n/2的球队进入淘汰赛

  • 积分排名的规则如下:球队获胜得3分,平局得1分,失利得0分,按照积分递减、净胜球递减以及进球数递减方式排名

    编写一个程序,根据给出的参赛队伍名单和所有比赛的结果,找出成功进入淘汰赛阶段的球队名单。

【输入形式】

       第一行输入包含唯一整数n(1<=n<=50),参加世界杯决赛的球队数量。接下来的n行是各球队的名字,为长度不超过30个字符的英文字符。接下来的n*(n-1)/2行,每行格式name1-name2 num1:num2(0<=num1, num2<=100),表示对阵球队及比分. 

【输出形式】

       输入n/2行,表示进入淘汰赛阶段的球队,按照字典序进行排列,每个球队名字占一行。
【样例输入】

4
A
B
C
D
A-B 1:1
A-C 2:2
A-D 1:0
B-C 1:0
B-D 0:3
C-D 0:3

【样例输出】

A
D

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

#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
struct team
{
	int scores;
	int jingshen;
	int jingqiu;
	string name;
};
bool cmp(team a,team b)
{
	if(a.scores!=b.scores)
	{
		return a.scores>b.scores;
	}
	else if(a.jingshen!=b.jingshen)
	{
		return a.jingshen>b.jingshen;
	}
	else if(a.jingqiu!=b.jingqiu)
	{
		return a.jingqiu>b.jingqiu;
	}
}
bool cmp1(team a,team b) 
{
    return a.name < b.name; //按字典序从小到大排列
}
int main()
{
	int n;
	cin>>n;
	team match[n];
	for(int i=0;i<n;i++)
	{
		cin>>match[i].name;
		match[i].scores=0;
		match[i].jingshen=0;
		match[i].jingqiu=0;
	}
	int cishu=n*(n-1)/2;
	string a[cishu],b[cishu];
	for(int i=0;i<cishu;i++)
	{
		cin>>a[i]>>b[i];
	}
	for(int i=0;i<cishu;i++)
	{
	    int j=0;
	    int k=0;
	    string x=a[i];
	    int m=x.find('-');
	    string xj=x.substr(0,m);
	    string xk=x.substr(m+1,x.length()-m-1);
	    string x2=b[i];
		for(;j<n;j++)
		{
			if(xj==match[j].name)
			break;
		}
		for(;k<n;k++)
		{
			if(xk==match[k].name)
			break;
		}
		match[j].jingqiu+=(x2[0]-'0');
		match[k].jingqiu+=(x2[2]-'0');
		if((x2[0]-'0')>(x2[2]-'0'))
		{
			match[j].scores+=3;
		}
		if((x2[0]-'0')<(x2[2]-'0'))
		{
			match[k].scores+=3;
		}
		if((x2[0]-'0')==(x2[2]-'0'))
		{
			match[k].scores+=1;
			match[j].scores+=1;
		}
		match[j].jingshen+=(x2[0]-'0')-(x2[2]-'0');
		match[k].jingshen+=(x2[2]-'0')-(x2[0]-'0');		
	}
	sort(match,match+n,cmp);
	team list[n/2];
	/*for(int i=0;i<n;i++)
	{
		cout<<match[i].name<<" "<<match[i].scores<<" "<<match[i].jingshen<<" "<<match[i].jingqiu<<endl;
	}*/
	for(int i=0;i<n/2;i++)
	{
		list[i].name=match[i].name;
	}
	sort(list,list+n/2,cmp1);
	for(int i=0;i<n/2;i++)
	{
		cout<<list[i].name<<endl;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值