任务描述编写C++程序奥运会上有一些综合项目有多个子项目如铁人三项、现代五项、十项全能等。假设这些综合项目的成绩是按照各个子项目的积分之和计算的总积分越高则成绩越好。设每个子项目的积分规则为如下:第1名积10分第2名积7分第3、4、5、6、7名分别5、4、3、2、1分其它名次没有积分。简化起见子项目排名没有并列名次情况。一个综合项目会有多运动员参加。要求:编写一个综合项目计分程序先由用户输入综合项
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Athlete {
string name;
vector<double> scores;
int totalScore;
int rank;
};
bool compare(const Athlete& a, const Athlete& b) {
if (a.totalScore != b.totalScore) {
return a.totalScore > b.totalScore;
}
return a.name < b.name;
}
int main() {
int numSubProjects; // 子项目个数
int numAthletes; // 运动员数目
cin >> numSubProjects >> numAthletes;
vector<Athlete> athletes(numAthletes);
// 输入运动员信息
for (int i = 0; i < numAthletes; i++) {
cin >> athletes[i].name;
athletes[i].scores.resize(numSubProjects);
athletes[i].totalScore = 0;
for (int j = 0; j < numSubProjects; j++) {
cin >> athletes[i].scores[j];
}
}
// 计算每个运动员的总积分
for (int i = 0; i < numAthletes; i++) {
for (int j = 0; j < numSubProjects; j++) {
if (j == 0) {
if (athletes[i].scores[j] <= 1) {
athletes[i].totalScore += 10;
} else if (athletes[i].scores[j] <= 2) {
athletes[i].totalScore += 7;
} else if (athletes[i].scores[j] <= 3) {
athletes[i].totalScore += 5;
} else if (athletes[i].scores[j] <= 4) {
athletes[i].totalScore += 4;
} else if (athletes[i].scores[j] <= 5) {
athletes[i].totalScore += 3;
} else if (athletes[i].scores[j] <= 6) {
athletes[i].totalScore += 2;
} else if (athletes[i].scores[j] <= 7) {
athletes[i].totalScore += 1;
}
} else {
if (athletes[i].scores[j] == 1) {
athletes[i].totalScore += 10;
} else if (athletes[i].scores[j] == 2) {
athletes[i].totalScore += 7;
} else if (athletes[i].scores[j] == 3) {
athletes[i].totalScore += 5;
} else if (athletes[i].scores[j] == 4) {
athletes[i].totalScore += 4;
} else if (athletes[i].scores[j] == 5) {
athletes[i].totalScore += 3;
} else if (athletes[i].scores[j] == 6) {
athletes[i].totalScore += 2;
} else if (athletes[i].scores[j] == 7) {
athletes[i].totalScore += 1;
}
}
}
}
// 排名
sort(athletes.begin(), athletes.end(), compare);
athletes[0].rank = 1;
for (int i = 1; i < numAthletes; i++) {
if (athletes[i].totalScore == athletes[i - 1].totalScore) {
athletes[i].rank = athletes[i - 1].rank;
} else {
athletes[i].rank = i + 1;
}
}
// 输出结果
for (int i = 0; i < numAthletes; i++) {
cout << athletes[i].rank << " " << athletes[i].name << " " << athletes[i].totalScore << endl;
}
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/hArK 著作权归作者所有。请勿转载和采集!