1032 挖掘机技术哪家强 (20 分)

1032 挖掘机技术哪家强 (20 分)

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

2 150

思路

  • 令数组school[maxn]记录每一个学校的总分,初值为0。对每一个读入的学校schId与其对应的分数score,令school[schId]+=score
  • 令变量k记录最高总分的学校编号,变量MAX记录最高总分,初值为-1.由于学校是连续编号的,因此枚举1~N,不断更新k和MAX即可

我的代码

#include<stdio.h>
int main(){
	int n, k = 1, MAX = -1;//用k记录最大总分的学校的编号 
	int school[100000]= {0};//记录每个学校的总分
	int schId, score;
	scanf("%d", &n);
    //这段是我写错的,因为学号是从1开始的,所以这样的话可能前面没有问题,但时编号一大就会出现问题,一直部分错误
	/*for(int i = 0; i < n; i++)*/
    for(int i = 1; i <= n; i++){//但是就算这样写,投到c通道还是有部分错误,投c++通道是正确的
		scanf("%d %d", &schId, &score);
		school[schId] += score;//把相同学校编号的成员的分数相加记录总分 
	}
	for(int i = 1; i <= n; i++){
		if(school[i] >MAX){//把每个学校的总分和max比较,谁更大谁更新给max,找出最大值 
			k = i;
			MAX = school[i];
		}
	}
	printf("%d %d", k, MAX); 
	return 0;
} 

示例输出时对的,但是有部分错误。改过了之后对了

参考代码

数组的定义与我的不一样,下面这样比较好。下次学习一下!

  1. 提前定义宏定义数组的最大值已经数组
  2. cstdio是将stdio.h的内容用C++头文件的形式表示出来
    cstdio 和 stdio.h是有差别的,并不是同样的文件
    stdio.h是以往的C和C++的头文件,cstdio是标准C++(STL),且cstdio中的函数都是定义在一个名称空间std里面的,如果要调用这个名字空间的函数,必须得加std::或者在文件中声明using namespace std。
  3. 这个与循环的把每一个值和循环值比较的方法也很好,所以MAX的初始值要设为-1,因为最低值是0。学习!!学习!!
#include<cstdio>
const int maxn = 100010;
int school[maxn] = {0};
int main(){
	int n, k = 1, MAX = -1;//用k记录最大总分的学校的编号 
	int schId, score;
	scanf("%d", &n);
	for(int i = 0; i < n; i++){
		scanf("%d %d", &schId, &score);
		school[schId] += score;//把相同学校编号的成员的分数相加记录总分 
	}
	for(int i = 1; i <= n; i++){
		if(school[i] >MAX){//把每个学校的总分和max比较,谁更大谁更新给max,找出最大值 
			k = i;
			MAX = school[i];
		}
	}
	printf("%d %d", k, MAX); 
	return 0;
} 

注意:上面代码在测试是要传入c++通道才能运行成功

上一篇:引用类型Resource注解注入


下一篇:Spring日常笔记注入05--构造注入