题目地址:PAT1077.互评成绩计算
题目描述:
在浙大的计算机专业课中,经常有互评分组报告这个环节。一个组上台介绍自己的工作,其他组在台下为其表现评分。最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平均分记为 G1;老师给这个组的评分记为 G2。该组得分为 (G1+G2)/2,最后结果四舍五入后保留整数分。本题就要求你写个程序帮助老师计算每个组的互评成绩。
求解过程:
本文通过sort对输入的vector排序,去除最低分和最高分,即得到答案。
程序:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
int N, M, x;
cin >> N >> M;
vector <vector<int> >GradeStu(N);
int GradeTe; // 老师的评分
for (int i = 0; i < N; i++)
{
cin >> GradeTe;
for (int j = 0; j < N-1; j++)
{
cin >> x;
if (x <= M && x >= 0) // 合法区间
GradeStu[i].push_back(x);
}
sort(GradeStu[i].begin(), GradeStu[i].end());
double sum = 0;
for (int k = 1; k < GradeStu[i].size() - 1; k++)
sum += GradeStu[i][k];
sum = sum / (GradeStu[i].size() - 2);
sum += GradeTe;
sum = (int)(sum/2 + 0.5);
cout << sum << endl; // 四舍五入
}
return 0;
}