PAT 乙级 1047 编程团体赛 v1.0
1. 题目简述及在线测试位置
1.1 输入数据格式是 队伍编号-队员编号 成绩,根据输入数据,输出成绩最好的队伍和成绩
1.2 在线测试位置:1047 编程团体赛
2. 基本思路
2.1 考虑到最后的输出是:成绩最好的队伍编号 及 该队伍的成绩,因此对于输入数据:队伍编号-队员编号 成绩,队员编号实际是一个干扰数据,对输入数据进行处理,简化为:队伍编号 成绩
2.2 在2.1的基础上,新建数组a[1001],数组下标对应队伍编号(队伍编号为 1 到 1000 的正整数),数组元素值对应队伍总成绩,据此存储数据即可。数据存储完毕,扫描整个数组,便可以得到成绩最好的队伍和具体成绩
3. 完整AC代码
#include <iostream>
using namespace std;
#define MAX 1001
int ProcessID(string N);
int main()
{
int a[MAX] = {0};
int Number;
string ID; int Grade;
int maxID, maxGrade = -1;//最佳成绩可能为0,因此初始值设定为负值
cin >> Number;
while (Number--)
{
cin >> ID >> Grade;
a[ProcessID(ID)] += Grade;
}
for (int i = 0; i < MAX; i++)
{
if (a[i] > maxGrade)
{
maxID = i;
maxGrade = a[i];
}
}
cout << maxID << " " << maxGrade;
return 0;
}
int ProcessID(string N)
{
char ID[4]; int Count = 0;
for (int i = 0; i < N.length(); i++)
{
if (N[i] != '-')
ID[Count++] = N[i];
else
break;
}
ID[Count] = '\0';
return atoi(ID);
}