编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。
现给定所有队员的比赛成绩,请你编写程序找出冠军队。
输入格式:
输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩
,其中队伍编号
为 1 到 1000 的正整数,队员编号
为 1 到 10 的正整数,成绩
为 0 到 100 的整数。
输出格式:
在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。
思路:
这题对于我来说比较难,参照大神的才完成,难点在于对“-”的处理,可以声明一个char变量,在没有遇到“-”之前,为队伍标号,储存队伍编号作为一个数组的下标,并借此加上此下标的分数,即可算出此队伍的总分,在这里,个人的编号是无关的。注意!在声明数组s[1000]的时候必须要初始化为0,不然无法对同下标的数组进行相加。然后再声明一个整数max=0;用队伍的总分与之比较得出最高分以及最高分的队伍进行输出。
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int s[1001]={0};
for(int i=0;i<n;i++)
{
int score;
char a[100];
int duiwu=0;
cin>>a;
cin>>score;
for(int j=0;a[j]!='-';j++)
{
duiwu=duiwu*10+(a[j]-'0');
}
s[duiwu]=s[duiwu]+score;
}
int max=0;
for(int i=0;i<1000;i++)
{
if(s[max]<s[i])
max=i;
}
cout<<max<<" "<<s[max]<<endl;
return 0;
}