PAT (Basic Level) Practice 1015(德才论)

发布于:2022-12-22 ⋅ 阅读:(416) ⋅ 点赞:(0)

 


1.首先总结分数关系:

L 最低录取分 ,H 优先录取分 根据要求可以分为四类:

第一类:德才 > H

第二类:德 > H && 才 < H

第三类:德才 < H && 德 >= 才

第四类:德才 > L

2.因为要有分数的排序,所以可以想到用sort函数,


3.开始我的想法是用一个结构体数组,直接全部排序,但是这个题目里有两个排序条件,一个是德分一个是才分,所以这个种思路是很难排序的,


4.可以创建四个结构体的vector。然后把每一类放到里面进行单独比较

(然后vector里面也可以用结构体里的东西,并且还有很多方便的函数,就比单独使用结构体数组方便,感觉c++就是比c 有很多头文件,可以用很多方便的东西,不用自己写函数)


5.通过第四点就可以将每一类分出来了,下面就是进行排序功能了,sort 函数里面有三个参数

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,此时默认的排序方法是从小到大排序。可以自己写一个函数,来确定排序的方法

int cmp(student a, student b)
{
    if (a.sum == b.sum)
    {
        if (a.de == b.de)
        {
            return b.id > a.id;
        }
        return a.de > b.de;
    }
    return a.sum > b.sum;
}

最后根据题目要求输出就行

/*
第一类:德才 > H
第二类:德 > H && 才 < H
第三类:德才 < H && 德 > 才
第四类:德才 > L
*/
/*
arr[i].de>=H&&arr[i].cai>=H
arr[i].de>=H&&arr[i].cai<H
*/
#include <iostream>
#include <stdlib.h>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
struct student
{
    int id;
    int de, cai;//德,才
    int sum;//总分
} arr;
int cmp(student a, student b)
{
    if (a.sum == b.sum)
    {
        if (a.de == b.de)
        {
            return b.id > a.id;
        }
        return a.de > b.de;
    }
    return a.sum > b.sum;
}
int main()
{
    int n, L, H;
    vector<student> v1, v2, v3, v4;
    cin >> n >> L >> H;
    for (int i = 0; i < n; i++)
    {
        cin >> arr.id >> arr.de >> arr.cai;
        arr.sum = arr.cai + arr.de;
        if (arr.cai >= L && arr.de >= L)
        {
            if (arr.cai >= H && arr.de >= H)
                v1.push_back(arr);
            else if (arr.de >= H && arr.cai < H)
                v2.push_back(arr);
            else if (arr.de < H && arr.cai < H && arr.cai <= arr.de)
                v3.push_back(arr);
            else
                v4.push_back(arr);
        }
    }
    cout << v1.size() + v2.size() + v3.size() + v4.size() << endl;
    sort(v1.begin(), v1.end(), cmp);
    sort(v2.begin(), v2.end(), cmp);
    sort(v3.begin(), v3.end(), cmp);
    sort(v4.begin(), v4.end(), cmp);
    for (int i = 0; i < v1.size(); i++)
        cout << v1[i].id << " " << v1[i].de << " " << v1[i].cai << endl;
    for (int i = 0; i < v2.size(); i++)
        cout << v2[i].id << " " << v2[i].de << " " << v2[i].cai << endl;
    for (int i = 0; i < v3.size(); i++)
        cout << v3[i].id << " " << v3[i].de << " " << v3[i].cai << endl;
    for (int i = 0; i < v4.size(); i++)
        cout << v4[i].id << " " << v4[i].de << " " << v4[i].cai << endl;

    system("pause");
}

菜狗一个,写的简单,希望有人可以交流一下

推荐一下,B站,PTA讲解这位老师讲的挺好的,一般是用STL库里的方法。


网站公告

今日签到

点亮在社区的每一天
去签到