#include <iostream.h>
const int LEN=30,M=100,N=100;
typedef struct
{
int num;//抽簽號碼
char name[LEN];//姓名
float score;//得分
} player;
player players[M];//歌手信息
int a[M][N];//評委打分信息
int m,n;//歌手和評委數量
//輸入歌手信息和評委打分信息
void input(void)
{
int i,j;
cout<<"歌手數量:";
cin>>m;
cout<<"評委數量:";
cin>>n;
for(i=0;i<m;i++)
{
players[i].num=i+1;
cout<<"第"<<i+1<<"個歌手的姓名:";
cin>>players[i].name;
cout<<"第"<<i+1<<"個歌手的評委打分:";
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
}
}
//求平均值(去掉壹個最高分,去掉壹個最低高分,求出其余n-2個分數的平均值
void calculate(void)
{
int max,min,i,j;
for(i=0;i<m;i++)
{
max=min=players[i].score=a[i][0];
for(j=1;j<n;j++)
{
players[i].score+=a[i][j];
if(max<a[i][j])
{
max=a[i][j];
}
if(min>a[i][j])
{
min=a[i][j];
}
}
if(n>2)
{
players[i].score=(players[i].score-max-min)/(n-2);
}
else if(n>0)
{
players[i].score/=n;
}
}
}
//對各個選手的得分,用冒泡法排序
//如果用快速排序或堆排序,把這段改寫壹下就行了
void sort(void)
{
int i,j;
for(i=0;i<m-1;i++)
{
for(j=m-1;j>i;j--)
{
if(players[j].score>players[j-1].score)
{
player tmp;
tmp=players[j];
players[j]=players[j-1];
players[j-1]=tmp;
}
}
}
}
//顯示所有原始數據
void show_origin(void)
{
int i,j;
cout<<endl;
for(i=0;i<m;i++)
{
cout<<"抽簽號碼:"<<players[i].num<<"\t";
cout<<"姓名:"<<players[i].name<<"\t";
cout<<"評委打分:";
for(j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
//顯示所有歌手的信息
void show_player(void)
{
int i;
cout<<endl;
for(i=0;i<m;i++)
{
cout<<"抽簽號碼:"<<players[i].num<<"\t";
cout<<"姓名:"<<players[i].name<<"\t";
cout<<"得分:"<<players[i].score<<endl;
}
}
//顯示獲獎歌手的信息
void show_medal(void)
{
int i;
cout<<endl;
cout<<"壹等獎1名:"<<endl;
for(i=0;i<1 && i<m;i++)
{
cout<<"抽簽號碼:"<<players[i].num<<"\t";
cout<<"姓名:"<<players[i].name<<"\t";
cout<<"得分:"<<players[i].score<<endl;
}
cout<<"二等獎3名:"<<endl;
for(;i<1+3 && i<m;i++)
{
cout<<"抽簽號碼:"<<players[i].num<<"\t";
cout<<"姓名:"<<players[i].name<<"\t";
cout<<"得分:"<<players[i].score<<endl;
}
cout<<"三等獎5名:"<<endl;
for(;i<1+3+5 && i<m;i++)
{
cout<<"抽簽號碼:"<<players[i].num<<"\t";
cout<<"姓名:"<<players[i].name<<"\t";
cout<<"得分:"<<players[i].score<<endl;
}
}
int main()
{
input();
show_origin();
calculate();
show_player();
sort();
show_medal();
return 0;
}