您的位置:首页 > 其它

足球赛确定淘汰赛名单-map<string, int>问题

2017-09-16 19:45 323 查看
科大讯飞笔试题:

题意

足球赛确定淘汰赛名单

比赛规则:

1、参赛队伍为n支, n为偶数。

2、入围淘汰赛队伍为n/2支。

3、按积分排名,胜一场积3分,平一场积1分, 负一场积0分,积分相同按净胜球排名,净胜球相同按进球数排名。

输入输出

第一行为一个整数n,参赛队伍数

随后n行为球队名字

随后n*(n-1)/2行为赛事开展情况,格式为 name1-name2 num1:num2

输出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<iostream>
#include<string>
#include <map>
#include <vector>
using namespace std;
vector<string> ans;

int main() {
int n,i, j,len, n1, n2, n3, nu1, nu2;
string str, temp, na, nb, num1, num2;

vector<int> vec;
map<string, int> mymap;
map<string, int>::iterator it;

char ch;
while(cin >> n){
vec.clear();
mymap.clear();

for(i = 0; i < n; i++){
cin >> temp;
mymap.insert(pair<string, int>(temp, 0));
}
ch = cin.get();

for(i = 0; i < n*(n-1)/2; i++){
temp = "";
while(ch = cin.get()){
if(ch == '\n')
break;
temp += ch;
}

len = temp.length();                            //开始记录比赛情况
for(j = 0; j< len; j++){
if(temp[j] == '-'){
n1 = j;
na = temp.substr(0, j);                  //比赛的第一支队伍
}
if(temp[j] == ' '){
n2 = j;
nb = temp.substr(n1+1, n2-n1-1);         //比赛的第二支队伍
}
if(temp[j] == ':'){
n3 = j;
num1 = temp.substr(n2+1, n3-n2-1);       //第一支队伍的进球数
}

}
num2 = temp.substr(n3+1, len-n3-1);              //第二支队伍的进球数

nu1 = nu2 = 0;
for(j = 0; j < num1.length(); j++){
nu1 = nu1*10+(num1[j]-'0');
}
for(j = 0; j < num2.length(); j++){
nu2 = nu2*10+(num2[j]-'0');
}

if(nu1>nu2){
it = mymap.find(na);                        //胜一场积3分
it->second += 3;
}else if(nu1 == nu2){
it = mymap.find(nb);
it->second += 1;                             //平一场积1分
it = mymap.find(na);
it->second += 1;
}else{
it = mymap.find(nb);
it->second += 3;
}
}
for(it = mymap.begin(); it!= mymap.end(); it++){       //积分排序
vec.push_back(it->second);
}
sort(vec.begin(), vec.end());
for(it = mymap.begin(); it!= mymap.end(); it++){
if(it->second>vec[n/2-1]){
ans.push_back(it->first);                      //输出积分高的一半队伍
}
}
}
for(i = 0; i < ans.size(); i++){
cout << ans[i] <<"\n";
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息