C语言实现学生作业评分排序算法

问题描述:

给定N个学生的作业,每个作业有k个评审打分,要求计算出每个学生的最终得分,并按照非递减顺序输出得分最高的M个学生。

输入格式:

输入第一行给出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 <stdlib.h>

int main() {
    int N, k, M;
    scanf("%d %d %d", &N, &k, &M);

    // 存储学生评分
    float scores[N][k];

    // 输入学生的评分
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < k; j++) {
            scanf("%f", &scores[i][j]);
        }
    }

    // 计算每个学生的最终得分
    float final_scores[N];
    for (int i = 0; i < N; i++) {
        float sum = 0.0;
        for (int j = 0; j < k; j++) {
            sum += scores[i][j];
        }
        final_scores[i] = sum / k;
    }

    // 对最终得分进行排序
    for (int i = 0; i < N - 1; i++) {
        for (int j = i + 1; j < N; j++) {
            if (final_scores[i] > final_scores[j]) {
                float temp = final_scores[i];
                final_scores[i] = final_scores[j];
                final_scores[j] = temp;
            }
        }
    }

    // 输出得分最高的M个学生的成绩
    for (int i = N - M; i < N; i++) {
        printf("%.3f", final_scores[i]);
        if (i < N - 1) {
            printf(" ");
        }
    }

    return 0;
}
C语言实现学生作业评分排序算法

原文地址: https://www.cveoy.top/t/topic/mNTZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录