数据结构C语言程序设计

img


参加运动会有n个学校,学校编号为1到n。比赛分成m个男子项目和w个女子项目。项目编号为男子1到m,女子m+1到m+w。不同的项目取前五名或前三名积分;取前五名积分分别为7.5.3.2.1,前三名积分分别为:5.3.2;哪些取前五名或前三名自行设定。

源于ChatGPT仅供参考

以下是一个计算每个学校在所有项目中获得的总积分的C语言代码,可以参考:

```c
#include <stdio.h>

#define MAX_SCHOOLS 100

// 定义比赛项目结构体
typedef struct {
    int num; // 项目编号
    int quota; // 前几名有积分
    float point[5]; // 不同名次的积分
} Event;

int main() {
    int n, m, w;
    Event events[MAX_SCHOOLS]; // 存储所有项目的信息
    float score[MAX_SCHOOLS] = {0}; // 每个学校的总分数,初始化为0

    printf("请输入学校数量n:");
    scanf("%d", &n);
    printf("请输入男子项目数量m:");
    scanf("%d", &m);
    printf("请输入女子项目数量w:");
    scanf("%d", &w);

    // 初始化所有项目的信息
    for (int i = 1; i <= m + w; i++) {
        events[i].num = i;
        if (i <= m) {
            events[i].quota = 5;
            events[i].point[0] = 7.5;
            events[i].point[1] = 3;
            events[i].point[2] = 2;
            events[i].point[3] = 1;
            events[i].point[4] = 0;
        } else {
            events[i].quota = 3;
            events[i].point[0] = 5;
            events[i].point[1] = 3;
            events[i].point[2] = 2;
        }
    }

    // 循环读入每个项目的获奖学校编号,计算积分
    for (int i = 1; i <= m + w; i++) {
        printf("请输入男子%d或女子%d项目的前%d名获奖学校:", i, i, events[i].quota);
        for (int j = 0; j < events[i].quota; j++) {
            int school;
            scanf("%d", &school);
            score[school] += events[i].point[j];
        }
    }

    // 输出每个学校的总积分
    for (int i = 1; i <= n; i++) {
        printf("学校%d的总积分为%.1f\n", i, score[i]);
    }

    return 0;
}

用户需要依次输入学校数量n、男子项目数量m和女子项目数量w,然后再输入每个项目获奖学校的编号。最后程序会输出每个学校的总积分。

```

引用chatgpt4:

以下是一个可能的C语言程序设计,用于计算每个学校在比赛中获得的总积分:

```c
#include <stdio.h>

int main() {
    int n, m, w; // 学校数量、男子项目数量、女子项目数量
    printf("请输入学校数量、男子项目数量和女子项目数量:");
    scanf("%d %d %d", &n, &m, &w);

    int school_score[n][5] = {0}; // 每个学校的总积分数组
    int event_score[10][3] = {0}; // 每个项目的积分数组

    for (int i = 1; i <= n; i++) { // 对于每个学校
        for (int j = 1; j <= m; j++) { // 对于每个男子项目
            int event_id = j + m; // 事件编号为男子项目编号+女子项目数量
            if (event_id > m + w) { // 如果事件编号超过了女子项目数量,则为无效事件
                continue;
            }
            int score = 0; // 积分值初始化为0
            if (i <= 3) { // 如果是前三名比赛,则取前三名积分
                score = 5;
            } else { // 否则取前五名积分
                score = 7.5;
            }
            event_score[event_id][0] += score; // 将积分加入到对应的事件积分数组中
        }
        for (int j = m + 1; j <= m + w; j++) { // 对于每个女子项目
            int event_id = j; // 事件编号为女子项目编号
            if (event_id > m + w) { // 如果事件编号超过了女子项目数量,则为无效事件
                continue;
            }
            int score = 0; // 积分值初始化为0
            if (i <= 3) { // 如果是前三名比赛,则取前三名积分
                score = 5;
            } else { // 否则取前五名积分
                score = 7.5;
            }
            event_score[event_id][0] += score; // 将积分加入到对应的事件积分数组中
        }
    }

    for (int i = 1; i <= n; i++) { // 对于每个学校
        for (int j = 1; j <= m; j++) { // 对于每个男子项目
            int event_id = j + m; // 事件编号为男子项目编号+女子项目数量
            if (event_id > m + w) { // 如果事件编号超过了女子项目数量,则为无效事件
                continue;
            }
            school_score[i][j] += event_score[event_id][0]; // 将事件积分加入到对应的学校积分数组中
        }
        for (int j = m + 1; j <= m + w; j++) { // 对于每个女子项目
            int event_id = j; // 事件编号为女子项目编号
            if (event_id > m + w) { // 如果事件编号超过了女子项目数量,则为无效事件
                continue;
            }
            school_score[i][j] += event_score[event_id][0]; // 将事件积分加入到对应的学校积分数组中
        }
    }

    for (int i = 1; i <= n; i++) { // 对于每个学校
        printf("第%d个学校在比赛中获得了%d分。\n", i, school_score[i][0]); // 输出该学校在比赛中获得的总积分(包括所有项目的积分之和)
    }

    return 0;
}