首页 > 试题广场 >

题目标题: 大奖赛现场统分

[问答题]

题目标题:

大奖赛现场统分

题目描述:

编写一个为某大奖赛现场统分的程序,在评委打分之后,及时通报评分结果。已知某大奖赛有n个选手参赛,mm>2)个评委依次为参赛的选手评判打分,最高10分,最低0分。统分规则为:在每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分后,取平均分为该选手的最后得分。要求编程实现:根据n个选手的最后得分,从高到低排出名次表,以便确定获奖名单。

输入描述:

按以下顺序输入数据,数据之间用空格或回车间隔:选手人数n(不超过40),评委人数m(不超过20),第1位选手的编号, m个评委的打分,第2个选手的编号, m个评委的打分 …… 第n位选手的编号, m个评委的打分。

输出描述:

分行打印每个选手的名次,编号,最后得分,选手得分保留一位小数。

样式输入:

5

5

11

9.5  9.6  9.7  9.4  9.0

12

9.0  9.2  9.1  9.3  8.9

13

9.6  9.7  9.5  9.8  9.4

14

8.9  8.8  8.7  9.0  8.6

15

9.0  9.1  8.8  8.9  9.2

样式输出:

1 13 9.6

2 11 9.5

3 12 9.1

4 15 9.0

5 14 8.8

#include<stdio.h>
struct uers
{
int num;
double scores[20];
double sum;
}student[40],t;
int main()
{
int    i,n,m,j;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&student[i].num);
student[i].sum=0;
for(j=0;j<m;j++)
{
scanf("%lf",&student[i].scores[j]);
student[i].sum+=student[i].scores[j];
}
double max,min;
max=student[i].scores[0];
min=student[i].scores[0];
for(j=1;j<m;j++)
{
if(max<student[i].scores[j])
max=student[i].scores[j];
if(min>student[i].scores[j])
min=student[i].scores[j];
}
student[i].sum=(student[i].sum-min-max)/(m-2);
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(student[i].sum<student[j].sum)
{t=student[i];student[i]=student[j];student[j]=t;}
i=0;
printf("%d %d %.1lf",i+1,student[i].num,student[i].sum);
for(i=1;i<n;i++)
printf("\n%d %d %.1lf",i+1,student[i].num,student[i].sum);
return 0;
}

发表于 2017-05-17 04:36:00 回复(0)