C++ 综合项目计分程序:计算运动员排名和总积分
以下是使用 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来存储每个运动员的姓名和总积分。接下来,使用嵌套的循环读取每个运动员的姓名和各个子项目的成绩,并根据成绩计算总积分。然后,使用冒泡排序对运动员按照总积分进行排序。最后,输出运动员的排名、姓名和总积分。
程序说明:
- 结构体
Athlete: 用于存储每个运动员的姓名和总积分。 - 输入数据: 程序首先读取子项目个数和运动员个数。然后,依次读取每个运动员的姓名和每个子项目的成绩。
- 计算总积分: 程序根据成绩计算每个运动员在每个子项目的积分,并将所有子项目的积分累加到总积分中。
- 排序: 程序使用冒泡排序对运动员按照总积分进行排序,总积分高的运动员排名靠前。
- 输出结果: 程序输出每个运动员的排名、姓名和总积分。
注意事项:
- 子项目的成绩越小,排名越高。
- 程序假设子项目排名没有并列名次情况。
- 程序假设最终排名也没有并列名次情况。
- 运动员姓名中无空格。
- 运动员子项目的成绩为浮点数。
其他优化建议:
- 可以使用更高级的排序算法,如快速排序或归并排序,来提高排序效率。
- 可以使用
map或unordered_map来存储运动员的姓名和总积分,以方便查询和排序。 - 可以使用其他数据结构,如堆,来实现更高效的排名算法。
本程序是一个简单的示例,可以作为学习 C++ 编程和算法的参考。您可以根据需要对代码进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/o4lX 著作权归作者所有。请勿转载和采集!