原文链接:39.世界杯来了
个人思路仅供参考,如有不足欢迎指出。
更正:代码156、167行“+=”改为“-=”,另外比赛场次可以用n*(n-1)/2而不用C(n,2),题目有提到……
【问题描述】
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
【思路和做法】
- 主要是使用结构体存储各个球队的信息,用自定义函数来实现比赛信息的统计;
- 提交代码如下(10/10分,C++):
//39.世界杯来了
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
struct team
{
string t_name; //队伍名
int score_sum; //积分
int goals; //进球数
int goals_n; //净胜球数
team(string name)
{
this->t_name = name;
this->score_sum = 0;
this->goals = 0;
this->goals_n = 0;
}
};
int n; //有几支队伍
int num_cmpt; //一共几场比赛
string name; //队伍名称
vector<team> teams; //参赛队伍
vector<team>::iterator it; //迭代器it
vector<string> teams_vic; //进入淘汰赛的球队
vector<string>::iterator t_v; //迭代器t_v
vector<string> teams_cmpt; //某场比赛的两支队伍
string cmpt; //某场比赛的两支队伍
int goal_1, goal_2; //两支队伍得分
char chr; //占位
bool