3376. 成绩排序2

3376.成绩排序2

⭐️难度:简单

⭐️类型:排序

📖题目:题目链接

🌟思路:

1、排序要参考2个元素,所以要自定义一个学生类型;

2、考察自定义排序规则:

找出 不交换 的情况:

①题目要求成绩由低向高排,所以左成绩 < 右成绩时,不交换;

②题目要求成绩相等时,学号由小到大排,所以左成绩 = 右成绩 且 左学号 < 右学号时,不交换。

📚题解:

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<vector>  // vector不需要.h
#include<list>
#include<set>  // // 可以用 set 和 multiset
#include<unordered_set> // 可以用 unordered_set 和 unordered_multimap
#include<map>  // 可以用 map 和 multimap
#include<unordered_map> // 可以用 unordered_map 和 unordered_multimap
#include<algorithm>

using namespace std;

struct Student {
    int number;
    int score;
};

bool compare(Student lhs, Student rhs) {  // 参数类型和 "容器的元素的类型"一致
    if (lhs.score < rhs.score) {  // 左成绩 < 右成绩,不交换
        return true;
    }
    else if (lhs.score == rhs.score && lhs.number < rhs.number) { // 左成绩 = 右成绩 且 左学号 < 右学号,不交换
        return true;
    }
    else {
        return false;
    }
}

int main() {
    int n;
    scanf("%d", &n);

    vector<Student> vec(n);

    for (int i = 0;i < n;i++) {
        scanf("%d%d", &vec[i].number, &vec[i].score);
    }

    sort(vec.begin(), vec.end(), compare);

    for (int i = 0;i < n;i++) {
        printf("%d %d\n", vec[i].number, vec[i].score);
    }

    return 0;
}
相关推荐
shehuiyuelaiyuehao4 天前
算法46,分治快排,排序数组
java·算法·排序算法·排序
Logic1016 天前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
2601_9622998812 天前
排序,然后再使用
python·排序·列表·关键函数·装饰-排序-去装饰
Jasmine_llq14 天前
《P15803 [GESP202603 七级] 物流网络》
排序·贪心离线枚举策略(核心解题思想·分批处理 / 双指针扫描·dijkstra单源最短路算法·无向图建图(邻接表)·最短路拼接计算候选答案·边界补充:普通无优惠最短路
aqiu1111111 个月前
【算法刷题】蓝桥杯/AtCoder:删除元素后的中位数问题(Symmetry / Median)
算法·蓝桥杯·排序·中位数
aqiu1111111 个月前
【算法刷题】蓝桥杯:0星际争霸(大数比较 + 多关键字自定义排序)
算法·排序·自定义排序
aqiu1111111 个月前
【算法刷题】蓝桥杯:怎么倒茶(贪心算法 + 结构体排序)
贪心·排序
OuO-21 个月前
笔试强训 Day 43:kotori 和抽卡(二)、ruby 和薯条、循环汉诺塔
数学·前缀和·二分查找·动态规划·排序·滑动窗口·循环汉诺塔
Tisfy1 个月前
LeetCode 3731.找出缺失的元素:哈希 / 排序
算法·leetcode·哈希算法·排序·哈希表
Tisfy2 个月前
LeetCode 3016.输入单词需要的最少按键次数 II:排序(贪心)
linux·算法·leetcode·题解·贪心·排序·计数