题目连接(请点击)
思路:这道题借助sort来做较快,先用一个二维数组来存储评分的成绩,然后对每个人的作业评分用sort进行排序,去掉最高最低(不用实际去掉,最后求和在平均时,for循环的数组下标注意一下就行),然后在对每一个人作业的评分求和,在平均
#include<iostream>
#include<algorithm>
int grade[10000][10];
double ave[20];
using namespace std;
int main()
{
int N,K,M,i,j,l;
while(cin>>N>>K>>M)
{
for(i=0;i<N;i++)
for(j=0;j<K;j++)
cin>>grade[i][j];
for(i=0;i<N;i++)
{
sort(grade[i],grade[i]+K);
}
for(i=0;i<N;i++)
{
int sum=0;
for(j=1;j<K-1;j++)//注意下标,因为要去掉最低与最高分
sum=sum+grade[i][j];
ave[i]=1.0*sum/(K-2);
}
sort(ave,ave+N);
for(i=N-M;i<N-1;i++)
printf("%.3lf ",ave[i]);
printf("%.3lf\n",ave[i]);
}
return 0;
}