题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/3f27a0a5a59643a8abf0140b9a8cf1f7

#include<iostream>
#include<algorithm>
using namespace std;

//复习结构体
struct Student {
    int stuNum;
    int score;
};

const int maxN = 101;

struct Student list[maxN];

bool Compare(Student x, Student y) {
    if (x.score == y.score) {
        return x.stuNum < y.stuNum;
    } else {
        return x.score < y.score;
    }
}
//Compare函数定义规则:
//如果x,y是排序规则需要的顺序,则返回1

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d %d", &list[i].stuNum, &list[i].score);
    }
    sort(list, list + n, Compare);
    for (int i = 0; i < n; i++) {
        printf("%d %d\n", list[i].stuNum, list[i].score);
    }
    //学习自定义比较函数并用于sort
    //注意scanf '\n'吸收的问题
    //https://zhuanlan.zhihu.com/p/141802781
    //对于scanf的格式串来说
    //任何的空格字符(whitespaces)会匹配多个(可以没有)空格字符。所以当你敲下换行的时候,scanf还没法返回,因为他不知道后面还有没有更多的空格字符。此时scanf只有读到下一个非空格字符(比如说你的输入中的a字符),或者输入流被关闭(比如读到EOF)的时候,才会返回。
    //https://www.zhihu.com/question/557303828

}

Caution: scanf读%c之前必须要getchar()吸收上一次输入结束时输入的\n

全部评论

相关推荐

05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务