【程序设计训练】1-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
#include
#include
using namespace std;
struct team{ //队伍结构体string name; //队名int score; //积分int jin; //净胜球int goal; //进球数
};
int Find(string s,team *t,int n){for(int i=0;i<n;i++){if(s==t[i].name)return i;}return -1;
}
bool cmp(team a,team b){ //两支队伍进行比较的方法if(a.score!=b.score)return a.score>b.score; //比积分else if(a.jin!=b.jin)return a.jin>b.jin; //积分相同比净胜球else return a.goal>b.goal; //净胜球相同比进球
}
int main(){int n;cin>>n;cin.get();team t[n];for(int i=0;i<n;i++){cin>>t[i].name;t[i].goal=0;t[i].jin=0;t[i].score=0;}for(int i=0;i<n*(n-1)/2;i++){ //模拟比赛过程string str,t1,t2;char bi;int s1,s2;cin>>str;cin>>s1>>bi>>s2;int k=0;for(int i=0;i<30;i++)if(str[i]=='-'){k=i;break;}int len=str.length();t1=str.substr(0,k);t2=str.substr(k+1,len-1);int x,y;if(s1==s2)x=y=1;else if(s1>s2){x=3;y=0;}else {x=0;y=3;}int k1=Find(t1,t,n);t[k1].score+=x;t[k1].goal+=s1;t[k1].jin+=s1-s2;int k2=Find(t2,t,n);t[k2].score+=y;t[k2].goal+=s2;t[k2].jin+=s2-s1;}sort(t,t+n,cmp); //给所有队伍排序string teams[n/2]; for(int i=0;i<n/2;i++)teams[i]=t[i].name; //找出晋级球队sort(teams,teams+n/2); //球队名按字典序排序for(int i=0;i<n/2;i++)cout<<teams[i]<<endl;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
