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库里的方法。