有m个选手n个评委,每个评委给所有选手打分。最后得分的计算规则为去掉一个最高分,去掉一个最低分后取平均分为最后得分。要求按得分从高到低排出名次,公布获奖名单。本题要求用行指针实现。1≤m,n≤10。请务必用冒泡排序。
输入格式:
输入共m+1行,第一行是m和n两个整数,其他行是m×n个整数。
输出格式:
输出一行,表示选手编号的一种排列(用%3d格式),这种排列代表得分从高到低的选手顺序。
输入样例:
8 5
7 8 9 7 8
8 9 7 9 8
8 9 8 8 7
8 9 9 9 8
7 6 8 9 7
6 7 8 9 9
6 7 8 7 8
7 8 7 6 7
输出样例:
4 2 3 6 1 5 7 8
#include<stdio.h>
float swap(float *x,float *y)
{
float temp;
temp=*x;
*x=*y;
*y=temp;
}
float average(float score[],int n)
{
float sum=0;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(score[j]<score[j+1])
{
swap(&score[j],&score[j+1]);
}
}
}
for(int i=1;i<n-1;i++)
{
sum+=score[i];
}
return sum/(n-2);
}
int main()
{
int m,n;
int temp;
scanf("%d %d",&m,&n);
float score[m][n];
float r[m];
int c[10]={1,2,3,4,5,6,7,8,9,10};
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf("%f",&score[i][j]);
}
}
for(int i=0;i<m;i++)
{
r[i]=average(score[i],n);
}
for(int i=0;i<m-1;i++)
{
for(int j=0;j<m-i-1;j++)
{
if(r[j]<r[j+1])
{
swap(&r[j],&r[j+1]);
temp=c[j];
c[j]=c[j+1];
c[j+1]=temp;
}
}
}
for(int i=0;i<m;i++)
{
printf("%3d",c[i]);
}
return 0;
}