原始代码:
#include <cstdio>
const int maxn = 10005;
int school[maxn] = {0};
int main(){
int n, schID, score;
scanf("%d", &n);
for(int i=1; i<=n; i++){
scanf("%d %d", &schID, &score);
school[schID] += score;
}
int k=1, MAX=-1;
for(int i=1; i<=n; i++){
if(school[i] > MAX){
MAX = school[i];
k = i;
}
}
printf("%d %d", k, MAX);
return 0;
}
因为用的是DEV C++,通过编译了之后就提交到了题库,没想到还是有错误,具体错误如下:
三个错误:
第一个:头文件错误
头文件开始用的是# include <cstdio>
,在DEV C++里没有问题,但是在提交的时候没有通过,改成了# include <stdio.h>
才通过。
第二个:warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
这个是因为忽略了 scanf 函数的返回值才有的警告,代码没有错误处理,如果输入的数据格式不正确的话就会报错,解决方法是把 scanf 函数用 if 扩起来就好了。
解决方法:if(scanf("%d", &n)){};
第三个:段错误。
在提交了之后前几个测试点都正确,但是在第三个测试点的时候报了段错误,这是因为数组不够大导致的,注意是10的5次方,笔者在这里开了10005的数组,少了一位,所以会报段错误。
解决方法:注意题目要求,数组大小要准确,开到100005.
改正之后:
#include <stdio.h>
int school[100005] = {0};
int main(){
int n, schID, score;
if(scanf("%d", &n)){}
for(int i=1; i<=n; i++){
if(scanf("%d %d", &schID, &score));
school[schID] += score;
}
int k=1, MAX=-1;
for(int i=1; i<=n; i++){
if(school[i] > MAX){
MAX = school[i];
k = i;
}
}
printf("%d %d\n", k, MAX);
return 0;
}