1 条题解

  • 0
    @ 2022-9-29 10:01:26

    利用选择排序

    #include <bits/stdc++.h>
    using namespace std;
    struct Stu
    {
        //学号、语、数、英成绩、总分
        int id, chi, mat, eng, tot;
    };
    int n;
    Stu a[305];
    //返回两个参数是否满足严格偏序
    bool cmp(Stu x, Stu y)
    {
        if(x.tot != y.tot)
            return x.tot > y.tot;
        //如果上面的 if 没有成立
        //没有执行 return 语句
        //才会继续执行下面的代码
        //所以下面的代码自带 x.tot == y.tot 成立这个条件
        if(x.chi != y.chi)
            return x.chi > y.chi;
        return x.id < y.id;
    }
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i].chi >> a[i].mat >> a[i].eng;
            a[i].id = i;
            a[i].tot = a[i].chi + a[i].mat + a[i].eng;
        }
        //选择排序
        for (int i = 1; i <= n; i++)
            for (int j = i + 1; j <= n; j++)
                if (!cmp(a[i], a[j]))
                    swap(a[i], a[j]);
        for (int i = 1; i <= 5 && i <= n; i++)
            cout << a[i].id << " " << a[i].tot << "\n";
        return 0;
    }
    

    利用 sort 函数

    #include <bits/stdc++.h>
    using namespace std;
    struct Stu
    {
        //学号、语、数、英成绩、总分
        int id, chi, mat, eng, tot;
    };
    int n;
    Stu a[305];
    //返回两个参数是否满足严格偏序
    bool cmp(Stu x, Stu y)
    {
        if(x.tot != y.tot)
            return x.tot > y.tot;
        //如果上面的 if 没有成立
        //没有执行 return 语句
        //才会继续执行下面的代码
        //所以下面的代码自带 x.tot == y.tot 成立这个条件
        if(x.chi != y.chi)
            return x.chi > y.chi;
        return x.id < y.id;
    }
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i].chi >> a[i].mat >> a[i].eng;
            a[i].id = i;
            a[i].tot = a[i].chi + a[i].mat + a[i].eng;
        }
        sort(a + 1, a + n + 1, cmp);
        for (int i = 1; i <= 5 && i <= n; i++)
            cout << a[i].id << " " << a[i].tot << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    399
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    (无)
    递交数
    106
    已通过
    40
    上传者