1032. 挖掘机技术哪家强

PAT组织了一场挖掘机技能大赛,通过比赛结果统计出了技术最强的学校。算法读取参赛人数及每位参赛者的信息和成绩,利用排序算法找出总得分最高的学校。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

输入格式:

输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。

输出格式:

在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。

输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150
算法:
  1. 算法开始。
  2. 声明定义结构体,包括学校编号和比赛成绩。
  3. 读入参赛人数,i=0。
  4. 如果i>=参赛人数,则跳到第七步。
  5. 读入学校编号和比赛成绩。
  6. i++。回到第四步。
  7. 用qsort()函数给该结构数组排序。
  8. i=0。
  9. 如果i>=参赛人数,则跳到第十四步。
  10. 如果学校编号没有发生变化,则该参赛者成绩加到tmp中的分数中。跳到第十三步。
  11. 如果学校编号发生变化,则tmp中的分数与max中的分数进行比较,如果前者大于后者,则max=tmp。
  12. tmp中的学校编号等于当前学校编号,tmp的成绩等于该参赛者的成绩。
  13. i++,回到第九步。
  14. 输出学校编号和总成绩。
  15. 算法结束。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值