【PAT】B1077 互评成绩计算(20 分)
录入成绩,直接将所有同学给的分数相加,排序,减去最大和最小
省去了遍历一次
注意四舍五入
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
int main(){
//分别是分组数和满分
int N,M;scanf("%d %d",&N,&M);
for(int i=0;i<N;i++){ //每个学生
//每行给出该组得到的 N 个分数
int g2,num=0,score=0,data[100];
scanf("%d",&g2); //教师给的成绩
for(int j=0;j<N-1;j++){ //接受同学给的成绩并求和
int temp;scanf("%d",&temp);
if(temp>=0&&temp<=M){
score+=temp;data[num++]=temp;
}
}
sort(data,data+num); //排序,没有传入比较函数默认升序
score-=data[0];score-=data[num-1]; //减去最高分和最低分
float g1 = (float)score/(num-2); //求成绩
int final=(int)(((g1+g2)/2)+0.5); //四舍五入
printf("%d",final);
if(i!=N-1) printf("\n");
}
return 0;
}