n个人打乒乓球,好不热闹。已知每人各自胜了几局,请按胜局从多到少排序并输出每个人的排名rank(从1开始)、胜局数num及该人原来的输入序号index(从1开始),若num相同,则rank也相同,但输出时index小者优先输出
2条回答 默认 最新
threenewbee 2023-06-10 15:06关注#include <iostream> #include <algorithm> #include <string> using namespace std; struct Player { int index; // 输入序号 string name; // 玩家姓名 int wins; // 胜利局数 int rank; // 排名 // 重载小于运算符(用于排序) bool operator < (const Player& other) const { if (wins != other.wins) { return wins > other.wins; // 按照胜局从多到少排序 } else { return index < other.index; // 如果胜局相同,按照输入序号从小到大排序 } } }; const int MAXN = 100; Player players[MAXN]; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> players[i].name >> players[i].wins; players[i].index = i + 1; // 输入编号从1开始 } sort(players, players + n); // 按照胜局从多到少排序 for (int i = 0; i < n; i++) { if (i == 0 || players[i].wins != players[i-1].wins) { // 如果这个人的胜局和前一个人不同,那么这个人排名就是i+1 players[i].rank = i + 1; } else { // 否则这个人和前一个人排名相同 players[i].rank = players[i-1].rank; } cout << players[i].rank << " " << players[i].wins << " " << players[i].index << " " << players[i].name << endl; } return 0; }解决 无用评论 打赏 举报