![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C语言编程题,求助大佬,谢谢!
大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉1个最高分和1个最低分后,取平均分作为该选手的最后得分。要求编程实现根据n个选手的最后得分。
输入格式:
输入选手数目n,评委人数m,数据间隔一个空格;
从第2行起,输入每位选手的m个得分后换行,数据间隔一个空格。
输出格式:
每行输出一个选手的m个得分,以及该选手的最后得分(最后得分保留两位小数),数据间一个空格间隔,注意行尾无空格。
输入样例:
5 6
7 8 7 7 8 9
7 7 7 9 8 7
8 8 8 9 8 9
7 8 7 7 6 7
9 9 9 9 10 9
输出样例:
7 8 7 7 8 9 7.50
7 7 7 9 8 7 7.25
8 8 8 9 8 9 8.25
7 8 7 7 6 7 7.00
9 9 9 9 10 9 9.00 展开
#include "stdio.h"
#include <stdlib.h>
int main(int argc,char *argv[]){
int **p,*q,i,j,h,l,n,m;
printf("Please enter n & m(int n>1,m>2)...\n");
if(scanf("%d%d",&n,&m)!=2 || n<1 || m<2){
printf("Input error, exit...\n");
return 0;
}
q=(int *)malloc(sizeof(int)*(m+1)*n);
if(!q || (p=(int **)malloc(sizeof(int *)*n))==NULL){
printf("Application memory faiture, exit...\n");
return 0;
}
for(p[0]=q,i=1;i<n;p[i++]=p[i-1]+m+1);//组织成二维数组
printf("Please enter the score of %d players...\n",n);
for(i=0;i<n;i++){
for(l=10,h=p[i][m]=j=0;j<m;j++)
if(scanf("%d",p[i]+j)==1 && p[i][j]>=0){
p[i][m]+=p[i][j];//统计总分
if(p[i][j]<l)//求最低分
l=p[i][j];
if(p[i][j]>h)//求最高分
h=p[i][j];
}
else{
fflush(stdin);
j--;
}
p[i][m]-=(h+l);//减去最高分和最低分
}
printf("\n");
for(i=0;i<n;i++){
for(j=0;j<m;printf("%d ",p[i][j++]));
printf("%.2f\n",p[i][m]/(m-2.0));
}
free(p);
free(q);
return 0;
}
代码图片和运行样例: