Crossing_wei 2021-06-07 15:38 采纳率: 0%
浏览 585

C语言,校园歌手大赛

题目描述

圆圆是学生会的文艺部部长。她要组织下个月的校园歌手大赛。她为了公平公正原则让你写计算平均成绩并且按平均成绩排序(平均成绩一样的数序不变,排名一样)。平均成绩计算方法(8个评委给选手打分,要求去掉一个最高分和去掉一个最低分,再算出平均分)。

输入

测试数据包括多个实例。 每组数据包括选手的名字,名字的长度不超过30个字符。紧接着是8个1到10的实数,代表评委们对该选手的评分。输入直到文件结束。

输出

降序排序后每位选手排名、名字和最终得分(保留两位有效数字)。

样例输入

zhangsan 1 2 3 4 5 6 7 8
lisi 9 10 10 10 10 10 10 9
lili 10 10 10 10 9 10 10 10
yuanyuan 3 3 4 3 5 4 5 5
zhaowei 1 2 3 6 5 4 8 7

样例输出

1 lili 10.00
2 lisi 9.83
3 zhangsan 4.50
3 zhaowei 4.50
4 yuanyuan 4.00
  • 写回答

2条回答 默认 最新

  • lshen01 2023-03-17 12:29
    关注

    参考GPT和自己的思路:

    好的,这个问题可以用C语言来解决。我们可以先定义一个结构体,用来存储每一位选手的名字和分数。然后读入每组数据,针对每位选手计算平均分,将计算结果存入结构体中,并按照平均分进行排序输出即可。下面是一个可能的解答:

    #include <stdio.h>
    #include <string.h>
    #define MAX_N 100
    
    struct Player {
        char name[31]; // 选手名字
        double score;  // 选手平均分
    } players[MAX_N];   // 结构体数组
    
    // 比较函数,用于qsort排序
    int cmp(const void *a, const void *b) {
        Player *p1 = (Player *)a;
        Player *p2 = (Player *)b;
        if (p1->score != p2->score) {  // 平均分不同,按照降序排列
            return p2->score > p1->score ? 1 : -1;
        } else {  // 平均分相同,按照名字字典序排列
            return strcmp(p1->name, p2->name);
        }
    }
    
    int main() {
        char name[31];
        double scores[8];
        while (scanf("%s", name) != EOF) { // 每组数据读入
            double sum = 0, max = 0, min = 10;
            for (int i = 0; i < 8; i++) {
                scanf("%lf", &scores[i]);
                sum += scores[i];
                max = scores[i] > max ? scores[i] : max;
                min = scores[i] < min ? scores[i] : min;
            }
            double avg = (sum - max - min) / 6;
            // 将计算结果存入结构体中
            strcpy(players[0].name, name);
            players[0].score = avg;
            qsort(players, 1, sizeof(Player), cmp); // 按照平均分排序
        }
        // 输出结果
        int rank = 1, cnt = 1;
        printf("%d %s %.2lf\n", rank, players[0].name, players[0].score);
        for (int i = 1; i < MAX_N && players[i].score > 0; i++) {
            cnt++;
            if (players[i].score != players[i - 1].score) {
                rank = cnt;
            }
            printf("%d %s %.2lf\n", rank, players[i].name, players[i].score);
        }
        return 0;
    }
    

    这里我们使用了qsort库函数对结构体数组进行排序,按照平均分从高到低进行排序,如果平均分相同,则按照名字的字典序进行排序。在输出时需要考虑相同平均分的情况,需要统计排名并输出排名、名字以及平均分。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?