whenever

  • Home

  • Tags21

  • Categories6

  • Archives122

  • About

PAT乙级1047 || 编程团体赛(详解,C/C++示例,测试点分析)

Posted on 2019-10-01 In PAT

编程团体赛

题目描述

编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。

现给定所有队员的比赛成绩,请你编写程序找出冠军队。

输入格式

输入第一行给出一个正整数 N(≤$10^4$),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。

输出格式

在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。

输入样例

1
2
3
4
5
6
7
6
3-10 99
11-5 87
102-1 0
102-3 100
11-9 89
3-2 61

输出样例

1
11 176

问题解决

解题思想

本题的队员编号是用不到的,但是它会影响到我们对输入的处理,对于一行的参赛队员信息,空格前的部分以字符串的形式读入(%s字符串结束符是包括空格的),然后再提取出队伍编号,并将其作为数组s[]的下标,相应元素的内容统计该队伍的成绩;空格后的成绩以整型数值的形式读入即可,输入的同时统计成绩。

代码示例(C/C++)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cstdio>
using namespace std;
const int maxn = 1001;
int main()
{
int n;
scanf("%d",&n);
int s[maxn] = {0};
while(n--){
char temp[8]; //接收输入的一位队员的信息,不包括成绩即空格前的部分
int score; //接收输入的成绩
scanf("%s",temp);
scanf("%d",&score);
int num = 0; //队伍编号
for(int i = 0; temp[i] != '-'; i++){
num = num * 10 + temp[i] - '0';
}
s[num] += score; //统计本队成绩
}
int maxnum = 1; //冠军队编号初始化
for(int i = 2; i <= 1000; i++){
if(s[maxnum] < s[i]){
maxnum = i;
}
}
printf("%d %d",maxnum,s[maxnum]);
return 0;
}

题目来源:PAT乙级1047
作者:CHEN, Yue
单位:浙江大学

稀罕作者
Mengzhao Wang WeChat Pay

WeChat Pay

Mengzhao Wang Alipay

Alipay

# C/C++ # PAT # 编程
PAT乙级1046 || 划拳(详解,C/C++示例,测试点分析)
PAT乙级1048 || 数字加密(详解,C/C++示例,测试点分析)
  • Table of Contents
  • Overview
Mengzhao Wang

Mengzhao Wang

Try? All the way !
122 posts
6 categories
21 tags
  1. 1. 编程团体赛
    1. 1.1. 题目描述
    2. 1.2. 输入格式
    3. 1.3. 输出格式
    4. 1.4. 输入样例
    5. 1.5. 输出样例
    6. 1.6. 问题解决
      1. 1.6.1. 解题思想
      2. 1.6.2. 代码示例(C/C++)
© 2021 Mengzhao Wang