像鱼583 2021-10-16 14:17 采纳率: 66.7%
浏览 6
已结题

大家看看这个代码pta甲级1012


#include<iostream>
using namespace std;
#include<algorithm>
#include<map>
struct people {
    int id;
    int score[4];
    int rank[4];
};
bool comp0(struct people a,struct people b)
{
    return a.score[0] > b.score[0];
}
bool comp1(struct people a, struct people b)
{
    return a.score[1] > b.score[1];
}
bool comp2(struct people a, struct people b)
{
    return a.score[2] > b.score[2];
}
bool comp3(struct people a, struct people b)
{
    return a.score[3] > b.score[3];
}

int main()
{
    struct people man[2005];
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> man[i].score[1] >> man[i].score[2] >> man[i].score[3];
        man[i].score[0] = man[i].score[1] + man[i].score[2] + man[i].score[3];
        man[i].rank[0] = man[i].rank[1] = man[i].rank[2] = man[i].rank[3] = 0;
    }
    //排序
        //A
    sort(man, man + n, comp0);
    for (int i = 0; i < n; i++) {
        if (man[i].score[0] == man[i - 1].score[0] && i >= 1) {
            man[i].rank[0] = man[i - 1].rank[0];
        }
        else {
            man[i].rank[0] = i + 1;
        }
    }
    //C
    sort(man, man + n, comp1);
    for (int i = 0; i < n; i++) {
        if (man[i].score[1] == man[i - 1].score[1] && i >= 1) {
            man[i].rank[1] = man[i - 1].rank[1];
        }
        else {
            man[i].rank[1] = i + 1;
        }
    }
    //M
    sort(man, man + n, comp2);
    for (int i = 0; i < n; i++) {
        if (man[i].score[2] == man[i - 1].score[2] && i >= 1) {
            man[i].rank[2] = man[i - 1].rank[2];
        }
        else {
            man[i].rank[2] = i + 1;
        }
    }
    //E
    sort(man, man + n, comp3);
    for (int i = 0; i < n; i++) {
        if (man[i].score[3] == man[i - 1].score[3] && i >= 1) {
            man[i].rank[3] = man[i - 1].rank[3];
        }
        else {
            man[i].rank[3] = i + 1;
        }
    }

    //输出
    for (int i = 0; i < m; i++) {
        int mid;
        cin >> mid;
        for (int j = 0; j < n; j++) {
            if (mid == man[j].id) {
                int min = 9999;
                for (int v = 0; v < 4; v++) {
                    if (man[j].rank[v] < min) {
                        min = man[j].rank[v];
                    }
                }
                if (min == man[j].rank[0]) {
                    cout << man[j].rank[0] << " A" << endl;
                }
                else if (min == man[j].rank[1]) {
                    cout << man[j].rank[1] << " C" << endl;
                }
                else if (min == man[j].rank[2]) {
                    cout << man[j].rank[2] << " M" << endl;
                }
                else {
                    cout << man[j].rank[3] << " E" << endl;
                }
            }
            else {
                cout << "N/A" << endl;
            }
        }
    }


    system("pause");
    return 0;
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月24日
    • 创建了问题 10月16日

    悬赏问题

    • ¥15 请问Ubuntu要怎么安装chrome呀?
    • ¥15 视频编码 十六进制问题
    • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
    • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
    • ¥15 FileNotFoundError 解决方案
    • ¥15 uniapp实现如下图的图表功能
    • ¥15 u-subsection如何修改相邻两个节点样式
    • ¥30 vs2010开发 WFP(windows filtering platform)
    • ¥15 服务端控制goose报文控制块的发布问题
    • ¥15 学习指导与未来导向啊