题目: 小粉兔在本学期共修读了 N 门课程,第 i 门课程的课程代码为E[i],每门课程都需要在结课后进行课程考试。
教务开始处理粉兔的成绩。教务共录入了 M条成绩信息,一条成绩信息由课程代码和成绩组成。由于成绩可能存在调整,一门课程的成绩可能被重复录入,后录入的成绩将覆盖先录入的成绩。课程成绩在 60分及以上,该门课程为及格;否则,为不及格。
由于粉兔记性很差,很可能忘记参加某些课程的课程考试。如果教务没有录入粉兔某门课程的成绩,则代表粉兔旷考了该门课程。旷考的课程亦为不及格。
小 F 就是这名教务,小 F 对粉兔旷考和不及格的门数非常感兴趣,请你帮助她统计。
解答:
#include<stdio.h>
int n,m;
int E[1000000],A[1000000];
int finish=0,ok=0;
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&E[i]);
A[i]=-1;
}
while(m--){
int p,s,id;
scanf("%d %d",&p,&s);
for (int i=1;i<=n;i++){
if(E[i]==p){
id = i;
A[id]=s;
}
}
}
int ans1=0,ans2=0;
for(int i=1;i<=n;i++){
if(A[i]==-1){ans1++;}
if(A[i]<60){ans2++;}
}
printf("%d\n%d",ans1,ans2);
return 0;
}
感受: 全局定义的数组,在开始时,默认值均为 0。我们需要区分 没有录入成绩而导致的初始值 和 真的考了零分的 0。为了解决这个问题,我们可以将a[1∼N] 的初始值赋为 -1,这样,没有录入成绩,也就是旷考的科目就被区分出来了。