【PAT B1032】挖掘机技术哪家强(20分)

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805325918486528
题目分值:20
题目类型:简单模拟

题目描述

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

输入格式

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

输出格式

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

输入样例

6
3 65
2 80
1 100
2 70
3 40
3 0

输出样例

2 150

思路分析

  • 有不超过10^5的参赛人数,也就相当于有不超过10^5个学校
  • 用数组school[maxn]来记录每个学校的分数,初值为0,不断累加即可
  • 数据读取完毕后,再遍历一次来寻找最大值和最大值对应的编号

注意点

  • 培养两个习惯
  • 1.把常量放在main函数外声明,maxn用来表示数组最大维度
  • 2.把存储的数组也放在main函数外边声明
  • while(x--)这个循环后,x为0,是不能再次使用了

参考代码

C/C++

#include<stdio.h>
const int maxn = 100010;    //预设常量,养成这个习惯
int school[maxn]={0};        //数据存储直接放main外边,养成习惯(刷题) 
int main()
{
    int n;        //参赛人数
    scanf("%d",&n) ;
    int id,score;    //学校,分数 
    while(n--)        //读取数据,n经过这么处理之后,是不能再次使用的! 
    {
        scanf("%d%d",&id,&score);
        school[id] += score;
    } 
    
    int max_score = -1,max_id = 0;    //设置遍历下限
    for(int i=0;i<maxn;i++)        //找最大值 
    {
        if(school[i]>max_score)        //更新 
        {
            max_score = school[i];
            max_id = i;
        }
    } 
    
    printf("%d %d",max_id,max_score);
    return 0;
} 
文章目录