个人主页:mzwang.top
编程团体赛
题目描述:
编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。
现给定所有队员的比赛成绩,请你编写程序找出冠军队。
输入格式:
输入第一行给出一个正整数 N(≤ 1 0 4 10^4 104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:
队伍编号-队员编号 成绩
,其中队伍编号
为 1 到 1000 的正整数,队员编号
为 1 到 10 的正整数,成绩
为 0 到 100 的整数。输出格式:
在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。
输入样例:
6 3-10 99 11-5 87 102-1 0 102-3 100 11-9 89 3-2 61
输出样例:
11 176
题目来源:PAT乙级1047
作者:CHEN, Yue
单位:浙江大学
问题解决:
解题思想
本题的队员编号
是用不到的,但是它会影响到我们对输入的处理,对于一行的参赛队员信息,空格前的部分以字符串的形式读入(%s字符串结束符是包括空格的),然后再提取出队伍编号
,并将其作为数组s[]的下标,相应元素的内容统计该队伍的成绩;空格后的成绩以整型数值的形式读入即可,输入的同时统计成绩。
代码示例(C/C++)
小提示:请将以下代码保存为.cpp
格式(C++程序)左右滑动代码以查看完整代码(复制本文链接到电脑端浏览效果更佳)
#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;
}