PAT Basic Level 1047 编程团体赛 解题思路及AC代码

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);
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值