
2条回答 默认 最新
南城Flipped 2021-11-24 14:22关注没说能不能用结构体 我就没用了 用数组 写写还挺头疼的 要考虑排名时要对应裁判编号和运动员编号写的挺复杂 如果有简化的 麻烦共同进步一下
#include<stdio.h> #include<time.h> #include<math.h> #include <stdlib.h> #define N 5 #define M 12 int main() { //A代表运动员 C代表裁判 int s[N][M], s1[N][M]; //s1用于算平均分等操作,s用于第二问 double averageA[N], averageC[M], sumC[M], averageA1[N], averageC1[M];//averageA1[N], averageC1[M]用于排名时进行比较 int sumA[N], numA[N],numC[M]; int temp; srand((unsigned)time(NULL)); //随机数给分 for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { s[i][j] = rand() % 10; s1[i][j] = s[i][j]; printf("%d\t", s[i][j]); } printf("\n"); } //将每个人分数从小到大排列 for (int i = 0; i < N; i++) { for (int j = 0; j < M - 1; j++) { if (s1[i][j] > s1[i][j + 1]) { temp = s1[i][j + 1]; s1[i][j + 1] = s1[i][j]; s1[i][j] = temp; } } } //计算平均分 for (int i = 0; i < N; i++) { sumA[i] = 0; numA[i] = i + 1; //运动员编号赋值 for (int j = 1; j < M - 1; j++) { //通过下标限制去掉最高分和最低分 sumA[i] += s1[i][j]; } averageA[i] = sumA[i] / (double)(M - 2); averageA1[i] = sumA[i] / (double)(M - 2); } //将每个人平均分从大到小排列并且在numA排名表中对应切换运动员编号 for (int i = 0; i < N-1; i++) { for (int j = i+1; j < N ; j++) { if (averageA1[i] < averageA1[j]) { temp = averageA1[i]; averageA1[i] = averageA1[j]; averageA1[j] = temp; temp = numA[i]; numA[i] = numA[j]; numA[j] = temp; } } } //输出排名 for (int j = 0; j < N ; j++) { printf("%d号运动员得分%.2lf\n", numA[j], averageA[numA[j]-1]); } printf("\n"); //计算标准差 for (int i = 0; i < M; i++) { sumC[i] = 0; numC[i] = i + 1; for (int j = 0; j < N; j++) { sumC[i] += pow((s[numA[j] - 1][i] - averageA[numA[j] - 1]), 2); } averageC[i] = sqrt(sumC[i] / (double)(N - 1)); averageC1[i] = sqrt(sumC[i] / (double)(N - 1)); } //将每个裁判的标准差从大到小排列并且numC排名表中切换对应裁判编号 for (int i = 0; i < M - 1; i++) { for (int j = i + 1; j < M; j++) { if (averageC1[i] < averageC1[j]) { temp = averageC1[i]; averageC1[i] = averageC1[j]; averageC1[j] = temp; temp = numC[i]; numC[i] = numC[j]; numC[j] = temp; } } } //输出排名 for (int j = 0; j < M; j++) { printf("%d号裁判得分%.2lf\n", numC[j], averageC[numC[j] - 1]); } }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报