1. 成绩排序

题目来源与说明

2000年清华大学计算机研究生机试真题,试图通过本次题解总结和梳理成绩排序的所有复试题目。代码模板参考王道考研机试!

题目描述

有n个学生的数据,将学生数据按照成绩高低排序,如果成绩相同则按照名字字符序排序,如果姓名字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。

样例

样例输入
3
abc 20 99
bcd 19 97
bed 20 97
样例输出
bcd 19 97
bed 20 97
abc 20 99

C++ 代码

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;

struct E {
    char name[101];
    int age;
    int score;
}buf[1000];

bool cmp(E a, E b) {
    if(a.score!=b.score) return a.score < b.score;
    int temp=strcmp(a.name,b.name);
    if(temp!=0) return temp<0;
    else return a.age<b.age;
}

int main() {
    int n;
    while(scanf("%d",&n)!=EOF) {
        for(int i=0;i<n;i++) {
            scanf("%s%d%d",buf[i].name,&buf[i].age,&buf[i].score);
        }
        sort(buf,buf+n,cmp); //利用自己定义的规则对数组进行排序
        for(int i=0;i<n;i++) {
            printf("%s %d %d\n",buf[i].name,buf[i].age,buf[i].score);
        }
        return 0;
    }
}

同类题目

  1. 特殊排序

https://www.nowcoder.com/questionTerminal/57f0f528bff149be9580af66f6292430?toCommentId=3854391

C++ 代码

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

int main() {
    int n; //数据的个数
    int d[1000];
    while(scanf("%d",&n)!=EOF) {
        for(int i=0;i<n;i++) {
            scanf("%d",&d[i]);
        }
        sort(d,d+n);
        printf("%d\n",d[n-1]);
        if(n==1) printf("-1");
        for(int i=0;i<n-1;i++) 
            printf("%d ",d[i]);
    }
    return 0;
}

  1. EXCEL排序

https://www.nowcoder.com/questionTerminal/bf3ec474bb7d410dbb9d5bbcd07a93e5

C++ 代码

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
struct E{
    char no[7];
    char name[9];
    int score;
}buf[1000];
bool cmp1(E a,E b){ //c==1,学号递增
    int temp=strcmp(a.no,b.no);
    return temp<0;
}
bool cmp2(E a,E b){ //c==2,姓名非递减,学号递增
    int temp=strcmp(a.name,b.name);
    if(temp!=0) return temp<0;
    return cmp1(a,b);
}
bool cmp3(E a,E b){ //c==3,成绩非递减,学号递增
    if(a.score!=b.score) return a.score<b.score;
    return cmp1(a,b);
}

int main() {
    int n,c;
    while(scanf("%d%d",&n,&c)!=EOF&&n!=0) {
        for(int i=0;i<n;i++) scanf("%s%s%d",buf[i].no,buf[i].name,&buf[i].score);
        if(c==1) sort(buf,buf+n,cmp1);
        else if(c==2) sort(buf,buf+n,cmp2);
        else sort(buf,buf+n,cmp3);
        printf("Case:\n");
        for(int i=0;i<n;i++) printf("%s %s %d\n",buf[i].no,buf[i].name,buf[i].score);
    }
    return 0;
}

  1. 字符串排序

https://www.nowcoder.com/questionTerminal/dfeed0e0e4624814b122265e859783b2

C++ 代码

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;

struct E{
    char name[101];
}buf[100];

bool cmp(E a,E b) {
    return strlen(a.name)<strlen(b.name);
}
int main() {
    int n;
    while(scanf("%d",&n)!=EOF) {
        int t=0;           
        getchar();//吸收回车
        for(int i=0;i<n;i++){
            gets(buf[i].name);   //注意scanf遇到空格会断开,所以需要用get,//gets也只能用char[]
            if(strcmp(buf[i].name,"stop")==0) {
			    break;
			}
            t++;
        } 
        sort(buf,buf+t,cmp);
        for(int i=0;i<t;i++) printf("%s\n",buf[i].name);
    }
    return 0;
}

高校夏令营机试训练 文章被收录于专栏

Leetcode题目太多,不知道如何准备高校夏令营?欢迎关注本专栏,和本小白一起准备夏令营吧! 本专题的规划如下: 截止到4月下旬:以王道考研为依托,提供夏令营机考的准备计划,打好基础 截止到5月中旬:以剑指offer进一步加强 本专题的内容如下: 1. 给出题目的在线测试链接,方面您检查代码的正确性 2. 给出题解

全部评论

相关推荐

01-02 21:17
已编辑
西安理工大学 后端
程序员小白条:项目不太重要,你的优势的算法竞赛,然后多背相关的八股文,项目可以不作为重点考虑,面试可能就简单带过项目就行了,你可以直接写简历,背项目相关的八股文就行,也不用自己做,时间紧张的情况下,性价比最高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务