以下是使用 C++ 编写的综合项目计分程序的示例代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

struct Athlete {
    string name;
    int totalScore;
};

int main() {
    int numSubProjects, numAthletes;
    cin >> numSubProjects >> numAthletes;

    vector<Athlete> athletes(numAthletes);

    for (int i = 0; i < numAthletes; i++) {
        cin >> athletes[i].name;
        athletes[i].totalScore = 0;

        for (int j = 0; j < numSubProjects; j++) {
            double score;
            cin >> score;

            if (j == 0) {
                // 第1名积10分
                athletes[i].totalScore += 10;
            } else if (j == 1) {
                // 第2名积7分
                athletes[i].totalScore += 7;
            } else if (j >= 2 && j <= 6) {
                // 第3、4、5、6、7名分别积5、4、3、2、1分
                athletes[i].totalScore += (7 - j);
            }
        }
    }

    // 根据总积分进行排序
    for (int i = 0; i < numAthletes - 1; i++) {
        for (int j = 0; j < numAthletes - i - 1; j++) {
            if (athletes[j].totalScore < athletes[j + 1].totalScore) {
                swap(athletes[j], athletes[j + 1]);
            }
        }
    }

    // 输出运动员信息
    for (int i = 0; i < numAthletes; i++) {
        cout << i + 1 << ' ' << athletes[i].name << ' ' << athletes[i].totalScore << endl;
    }

    return 0;
}

示例输入:

3 4
Alex 10.1 21.5 15.7
Bolt 12.3 11.4 25.9
Jack 8.09 12.8 20.5
Will 11.5 17.6 24.3

示例输出:

1 Jack 24
2 Alex 21
3 Bolt 18
4 Will 15

该程序首先读取综合项目的子项目个数和参赛运动员数目。然后,使用一个结构体数组athletes来存储每个运动员的姓名和总积分。接下来,使用嵌套的循环读取每个运动员的姓名和各个子项目的成绩,并根据成绩计算总积分。然后,使用冒泡排序对运动员按照总积分进行排序。最后,输出运动员的排名、姓名和总积分。

程序说明:

  1. 结构体 Athlete: 用于存储每个运动员的姓名和总积分。
  2. 输入数据: 程序首先读取子项目个数和运动员个数。然后,依次读取每个运动员的姓名和每个子项目的成绩。
  3. 计算总积分: 程序根据成绩计算每个运动员在每个子项目的积分,并将所有子项目的积分累加到总积分中。
  4. 排序: 程序使用冒泡排序对运动员按照总积分进行排序,总积分高的运动员排名靠前。
  5. 输出结果: 程序输出每个运动员的排名、姓名和总积分。

注意事项:

  • 子项目的成绩越小,排名越高。
  • 程序假设子项目排名没有并列名次情况。
  • 程序假设最终排名也没有并列名次情况。
  • 运动员姓名中无空格。
  • 运动员子项目的成绩为浮点数。

其他优化建议:

  • 可以使用更高级的排序算法,如快速排序或归并排序,来提高排序效率。
  • 可以使用 mapunordered_map 来存储运动员的姓名和总积分,以方便查询和排序。
  • 可以使用其他数据结构,如堆,来实现更高效的排名算法。

本程序是一个简单的示例,可以作为学习 C++ 编程和算法的参考。您可以根据需要对代码进行修改和完善。


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

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