掘地之技孰为精

问题描述

根据某挖掘机技能大赛的比赛结果,统计出挖掘机技术最强的学校。、
输入

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

输出

在一行中给出总得分最高的学校编号及其总分,中间以空格分隔。

eg:

输入:

6
1 33
2 44
3 55
2 66
3 44
1 55

输出:

2 110

思路

  1. 令数组 school[N] 记录各个学校的总分。对每一个读入的选手,在其学校总分上加上其个人得分;
  2. 令变量 k 记录最高总分的学校的编号,变量 MAX 记录最高总分,初值为 -1。遍历数组 school[] ,找出总分最高的学校及其分数。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
//参赛总人数
#define N 100001
//初始化分数数组
int school[N] = {0};
int main()
{
int n, schoolID, score;
scanf("%d", &n); //输入参赛选手人数
int i;
for(i = 0; i < n; i++) //输入各选手的学校编号及其分数
{
scanf("%d%d", &schoolID, &score);
school[schoolID] += score; //学校总分增加 score
}
int k = 1, MAX = -1, j;
for(j = 1; j <= n; j++) //从所有学校中选出总分最高的一个
{
if (school[j] > MAX)
{
MAX = school[j];
k = j;
}
}
printf("%d %d\n", k, MAX); //输出总分最高的学校编号,及其分数
return 0;
}

point

卡壳是想着要统计学校的数目。其实不用。循环找最高分的时候,就用参赛选手人数 n 做上限就行。