牛客网计算机考研复试-KY9-成绩排序

题目链接:点这里


题目描述:
用一维数组存储学号和成绩,然后,按成绩排序输出。


思路:
对结构体排序就行了。
这里自己第一遍写的犯了一个错,对把学号id定义为了string类型,在排序的时候导致了错误,因为字符串比较的时候是从左到右按照ASCII码比较,当比较"13"和"9"的时候,反而"9">"13",所以如果题目里的学生id长度相同的时候,定义成string比较也可以,如果不同,则需要用int。

另外“asdf”<“asdfer”,因为字符串结尾多余的一个字节用来保存一个空字节,也就是ASCII等于0的字符‘\0’,用于表示字符串的结尾,在比较第4字符时,‘e’的ASCII大于0,故第二个字符串大。


代码:

#include <bits/stdc++.h>
using namespace std;
struct student{
    int id;
    int score;
}s[102];

bool cmp(student a,student b){
    if(a.score<b.score)
        return true;
    else if(a.score==b.score && a.id<b.id)
        return true;
    else
        return false;
}

int main(){
    string s1 = "9";
    string s2 = "90";
    int n;
    cin >> n;
    for(int i=0;i<n;i++)
        cin >> s[i].id >> s[i].score;
    sort(s,s+n,cmp);
    for(int i=0;i<n;i++)
        cout << s[i].id << " " << s[i].score << endl;
    return 0;
}
posted @ 2021-01-23 10:50  吐司奶猫荷包蛋  阅读(141)  评论(0编辑  收藏  举报