为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入格式:
输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:6 3 65 2 80 1 100 2 70 3 40 3 0输出样例:
2 150
算法:
- 算法开始。
- 声明定义结构体,包括学校编号和比赛成绩。
- 读入参赛人数,i=0。
- 如果i>=参赛人数,则跳到第七步。
- 读入学校编号和比赛成绩。
- i++。回到第四步。
- 用qsort()函数给该结构数组排序。
- i=0。
- 如果i>=参赛人数,则跳到第十四步。
- 如果学校编号没有发生变化,则该参赛者成绩加到tmp中的分数中。跳到第十三步。
- 如果学校编号发生变化,则tmp中的分数与max中的分数进行比较,如果前者大于后者,则max=tmp。
- tmp中的学校编号等于当前学校编号,tmp的成绩等于该参赛者的成绩。
- i++,回到第九步。
- 输出学校编号和总成绩。
- 算法结束。
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int index;
int grade;
}competitor;
int cmp(const void* v1, const void* v2);
int main(int argc, const char * argv[]) {
int n,i;
competitor* ptr;
competitor tmp={0}, max={0};
scanf("%d",&n);
ptr=(competitor*)calloc(n, sizeof(competitor));
for(i=0;i<n;i++){
scanf("%d %d", &(ptr[i].index), &(ptr[i].grade));
}
qsort(ptr, n, sizeof(competitor), cmp);
for(i=0; i<n; i++){
if(i==0){
tmp.index=ptr[i].index;
tmp.grade=ptr[i].grade;
}
else if(tmp.index==ptr[i].index){
tmp.grade+=ptr[i].grade;
}
else if(tmp.index!=ptr[i].index){
if(max.grade<=tmp.grade){
max=tmp;
}
tmp.index=ptr[i].index;
tmp.grade=ptr[i].grade;
}
}
if(tmp.grade>max.grade){
max=tmp;
}
printf("%d %d", max.index, max.grade);
return 0;
}
int cmp(const void* v1, const void* v2){
if(((competitor*)v1)->index>((competitor*)v2)->index){
return 1;
}
else if(((competitor*)v1)->index==((competitor*)v2)->index){
return 0;
}
else{
return -1;
}
}