题目:已知有n个歌手参加比赛,m个评委为歌手评分(最低0分,最高10分)。评分规则为:在每个歌手的m个得分中,去掉一个最低分和一个最高分后,取平均分作为该歌手的最后得分。要求编程实现:
(1)根据歌手的最后得分,从高到低输出歌手的得分名次。
(2)根据各歌手的最后得分与各评委给该歌手所评分数的差距,对每个评委评分的评分水准和准确性给出一个定量的评价,从高到低输出各评委得分的名次表。 评委得分 =
(score[i]为该评委给第i个歌手的评分,s[i]为第i个歌手的最后得分)
[输入要求]
输入包含2 * n + 1行:
第一行是歌手个数n和评委个数m(1 < n <= 40,2 < m <= 20)。
第二行是第1个歌手的编号(int范围整数)。
第三行是m个评委依次对第1个歌手给出的评分(float范围浮点数),每行m个评分,相邻两项之间用一个空格隔开。
……
第2 * n行是第n个歌手的编号(int范围整数)。
第2 * n + 1行是m个评委依次对第n个歌手给出的评分(float范围浮点数),每行m个评分,相邻两项之间用一个空格隔开。
[输出要求]
输出n + m行:
第一行到第n行是歌手的得分名次表,每行均有三项(排名、得分、歌手编号),相邻两项之间用一个空格隔开,得分输出要求小数点后必须保留3位有效数字(四舍五入),不足补零。
第n + 1行到第n + m行是评委的得分名次表,每行均有三项(排名、得分、评委编号),相邻两项之间用一个空格隔开,得分输出要求小数点后必须保留3位有效数字(四舍五入),不足补零。
[输入示例]
4 5
11
8.9 9.6 9.7 9.4 9
12
7.9 9.2 9.2 9.3 8.9
13
9.1 9.7 9.7 9.8 9.4
14
8.1 8.8 8.7 9.0 8.6
[输出示例]
1 9.600 13
2 9.333 11
3 9.100 12
4 8.700 14
1 9.841 2
2 9.804 3
3 9.791 4
4 9.776 5
5 9.252 1
要求:定义歌手信息结构体、自定义统计、排序等函数、有输入输出验证各种情况
///weixin_54455070/article/details/112537468//R_Habitat#include<stdio.h>#include<math.h>int n, m; //歌手、评委个数struct Artists_Info //歌手信息结构体{int Artists_ID; //歌手编号float Artists_Score[22]; //评委依次给出的该歌手成绩float Artists_SUM_Score; //歌手总成绩float Artists_AVG_Score; //歌手平均成绩}AIf[42];struct Judges_Info //评委得分结构体{float Judges_Score; //评委得分}JIf[22];void Input_Info() {//歌手信息输入for (size_t i = 0; i < n; i++){scanf("%d",&AIf[i].Artists_ID);for (size_t j = 0; j < m; j++){scanf("%f", &AIf[i].Artists_Score[j]);}}}void DP() {//数据处理for (size_t i = 0; i < n; i++) //平均分处理{float Max = AIf[i].Artists_Score[0]; //局部变量float Min = AIf[i].Artists_Score[0]; //局部变量for (size_t j = 0; j < m; j++){if (AIf[i].Artists_Score[j]>Max){Max = AIf[i].Artists_Score[j];}if (AIf[i].Artists_Score[j]<Min){Min = AIf[i].Artists_Score[j];}AIf[i].Artists_SUM_Score += AIf[i].Artists_Score[j];}AIf[i].Artists_AVG_Score = (AIf[i].Artists_SUM_Score - Max - Min) / (m - 2);}for (size_t i = 0; i < m; i++) //评委得分{float sum = 0;for (size_t j = 0; j < n; j++){sum += (AIf[j].Artists_Score[i] - AIf[j].Artists_AVG_Score) * (AIf[j].Artists_Score[i] - AIf[j].Artists_AVG_Score);}JIf[i].Judges_Score = 10 - sqrt(sum/ n);}}void Output_Info() {//输出int Judge_A = 1; //歌手名次int Cnt_A = 1; //计数器float AASP[50] = {0 }; //为了能让每次已经出来的最大值消失 新建数组 每次将最大值改为-1for (size_t i = 0; i < n; i++){AASP[i] = AIf[i].Artists_AVG_Score;}while (Judge_A){float Max = -1; //局部变量int Temp_A=0; //用于将分数与ID对应for (size_t i = 0; i < n; i++){if (AASP[i]>Max){Max = AASP[i];Temp_A = i;}}AASP[Temp_A] = -1; //新建数组最大值改变printf("%d %.3f %d\n", Cnt_A, Max, AIf[Temp_A].Artists_ID);Cnt_A++;if (Cnt_A-1==n){Judge_A = 0;}}int Judge_J = 1;//评委名次int Cnt_J = 1;float JSP[30] = {0 };for (size_t i = 0; i < m; i++){JSP[i] = JIf[i].Judges_Score;}while (Judge_J){float Max = JSP[0];int Temp_J = 0;for (size_t i = 0; i < m; i++){if (JSP[i] > Max) {Max = JSP[i];Temp_J = i;}}printf("%d %.3f %d\n", Cnt_J,Max,Temp_J+1);Cnt_J++;JSP[Temp_J] = -1;if (Cnt_J-1==m){Judge_J = 0;}}}int main() {scanf("%d %d", &n, &m);while (n <= 1 || n > 40) {printf("歌手人数非法,请重新输入:\n");scanf("%d", &n);}while (m <= 2 || m > 20) {printf("评委人数非法,请重新输入:\n");scanf("%d", &m);}Input_Info(); //歌手信息输入DP(); //数据处理Output_Info(); //歌手信息输出return 0;}///weixin_54455070/article/details/112537468//R_Habitat ZRZ
C语言题目:已知有n个歌手参加比赛 m个评委为歌手评分(最低0分 最高10分)。评分规则为:在每个歌手的m个得分中 去掉一个最低分和一个最高分后 取平均分作为该歌手的最后得分。
如果觉得《C语言题目:已知有n个歌手参加比赛 m个评委为歌手评分(最低0分 最高10分)。评分规》对你有帮助,请点赞、收藏,并留下你的观点哦!