500字范文,内容丰富有趣,生活中的好帮手!
500字范文 > 大奖赛现场统计:某大奖赛有n个选手参赛 m个评委为依次参赛的选手评判打分

大奖赛现场统计:某大奖赛有n个选手参赛 m个评委为依次参赛的选手评判打分

时间:2023-11-21 00:46:56

相关推荐

大奖赛现场统计:某大奖赛有n个选手参赛 m个评委为依次参赛的选手评判打分

作者说:“ 以下代码为初入C语言的笔记与作业,谨以此记录我的C学习生涯,重要之处皆有注释,若有疑问大可评论区留言。”

题目描述

某大奖赛有n(1<n<40)个选手参赛,m (2<m<20)个评委为依次参赛的选手评判打分:最高10分,最低0分。统分规则为:每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分,最后平均为该选手的最后得分。根据n个选手的最后得分从高到低排出名次表,以便确定获奖名单。

输入

输入选手的数目n(1<n<40),评委的数目m (2<m<20),以及评委对每位选手的打分。

输出

选手的排名及最终的得分值(小数点后保留两位)。

样例输入

3,5

5.6 7.8 9.4 5.8 8.8

7.8 6.7 8.3 6.9 5.5

6.7 9.2 8.8 8.3 9.0

样例输出

第1名:3号选手,得分8.70

第2名:1号选手,得分7.47

第3名:2号选手,得分7.13

本题需要掌握冒泡排序与选择排序其中之一,运用多重数组。

#include<stdio.h>int main(){int n,m,b[1000];//b数组为选手序号 float a[1000]={0};scanf("%d,%d",&n,&m);for(int j=0;j<n;j++){float tmp=0,max=0,min=10;//循环内定义变量方便二次使用 b[j]=j+1;//标记选手序号 for(int i=0;i<m;i++){scanf("%f",&tmp);a[j]+=tmp;//为了图方便我没有建立数组逐位保存选手成绩if (i==0){max=tmp;min=tmp;continue;//防止首次数据不被max min记录}if(tmp>max){max=tmp;}else if(tmp<min){min=tmp;}}a[j]=a[j]-min-max;//printf("%f%f",min,max);//printf("%.2f",a[j]/(m-2));}for(int i=0;i<n-1;i++){//冒泡排序 确定选手名次 for(int j=0;j<n-1-i;j++){int tmp,tmp1;if(a[j]<a[j+1]){tmp = a[j+1];a[j+1] = a[j];a[j]=tmp;tmp1 = b[j+1];b[j+1] = b[j];b[j]=tmp1;//选手序号跟着交换 }} }for(int i=0;i<n;i++)printf("第%d名:%d号选手,得分%.2f\n",i+1,b[i],a[i]/(m-2));return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。