caphiring 2023-06-10 14:14 采纳率: 0%
浏览 107

7-21 又见胜局排序

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;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 6月10日