互评成绩ptac语言

    技术2022-07-12  77

    7-4 互评成绩 (15分) 学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。

    输入格式: 输入第一行给出3个正整数N(3 < N ≤10 ​4 ​​ ,学生总数)、k(3 ≤ k ≤ 10,每份作业的评审数)、M(≤ 20,需要输出的学生数)。随后N行,每行给出一份作业得到的k个评审成绩(在区间[0, 100]内),其间以空格分隔。

    输出格式: 按非递减顺序输出最后得分最高的M个成绩,保留小数点后3位。分数间有1个空格,行首尾不得有多余空格。

    输入样例: 6 5 3 88 90 85 99 60 67 60 80 76 70 90 93 96 99 99 78 65 77 70 72 88 88 88 88 88 55 55 55 55 55 输出样例: 87.667 88.000 96.000

    #include<stdio.h> #include<string.h> int main(void) { int N,K,M; int i,j,k; double grade[10050][11]; double average[10005]; scanf("%d%d%d",&N,&K,&M); for(i=0;i<N;i++) for(j=0;j<K;j++) scanf("%lf",&grade[i][j]); for(i=0;i<N;i++) { for(j=0;j<K;j++) { for(k=0;k<K-1;k++) { if(grade[i][k]>grade[i][k+1]) { double temp=grade[i][k]; grade[i][k]=grade[i][k+1]; grade[i][k+1]=temp; } } } } for(i=0;i<N;i++) { double sum=0; for(j=1;j<K-1;j++) { sum=sum+grade[i][j]; } average[i]=(sum*1.0)/(K-2); } for(i=0;i<N;i++) { for(j=0;j<N-1;j++) { if(average[j]>average[j+1]) { double temp=average[j]; average[j]=average[j+1]; average[j+1]=temp; } } } for(i=N-M;i<N;i++) { if(i==N-M) printf("%.3lf",average[i]); else printf(" %.3lf",average[i]); } }
    Processed: 0.017, SQL: 9