解题策略:排序去掉vector的头和尾即可,不用考虑最高分或者最低分是否有重复.
注意:用cin和cout会超时- -
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
bool cmp(int a,int b)
{
return a > b;
}
int main()
{
int caseNum;
cin >> caseNum;
while(caseNum--)
{
int m,n;
cin >> n >> m;
vector<int> data;//一位选手的所有得分
int score[101][101];
for(int i = 0;i < n;i++)
for(int j = 0;j < m;j++)
scanf("%d",&score[i][j]);
for(int i = 0;i < m;i++)
{
for(int j = 0;j < n;j++)
{
data.push_back(score[j][i]);
}
//分数排序
sort(data.begin(),data.end(),cmp);
double count = 0;
for(int l = 1;l < data.size() - 1;l++)
count += data[l];
printf("%.2f\n",count / (n - 2));
data.clear();
}
}
return 0;
}