问题 C: EXCEL排序

举报
陈沧夜 发表于 2022/04/29 22:14:26 2022/04/29
【摘要】 http://codeup.cn/problem.php?cid=100000581 题目描述 Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。 对每个测试用例,首先输出1行“C...

http://codeup.cn/problem.php?cid=100000581

题目描述

Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

输入

测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。

输出

对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

样例输入

4 1
000001 Zhao 75
000004 Qian 88
000003 Li 64
000002 Sun 90
4 2
000005 Zhao 95
000011 Zhao 75
000007 Qian 68
000006 Sun 85
4 3
000002 Qian 88
000015 Li 95
000012 Zhao 70
000009 Sun 95
0 3

样例输出

Case 1:
000001 Zhao 75
000002 Sun 90
000003 Li 64
000004 Qian 88
Case 2:
000007 Qian 68
000006 Sun 85
000005 Zhao 95
000011 Zhao 75
Case 3:
000012 Zhao 70
000002 Qian 88
000009 Sun 95
000015 Li 95

题解


#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
//下面语句目的是输入输出重定向,由于相关内容较多详情见我之前文章《输入输出重定向》,望见谅
//#define LOCAl
using namespace std;
struct Students{//结构体定义,注意数组一定要定义大些,否则容易出问题
    char id[8];
    char name[10];
    int score;
    Students(){};
};
bool cmp1(Students a,Students b){
    return strcmp(a.id,b.id)<0;
}
bool cmp2(Students a,Students b){
    if(strcmp(a.name,b.name)!=0)  {return strcmp(a.name,b.name)<0;}
    else    {return  strcmp(a.id,b.id)<0; }
}
bool cmp3(Students a,Students b){
    if(a.score!=b.score)    return a.score<b.score;
    else    return strcmp(a.id,b.id)<0;
}
int main() {
#ifdef LOCAl	//输入输出重定向
    freopen("test.in","r",stdin);
    freopen("test.out","w",stdout);
#endif
    int N,C,num=0;
    while(scanf("%d %d",&N,&C)!=EOF) {
        if(N==0)    break;
        Students stu[100010]; 
        num++;
        
        for (int i = 0; i < N; i++) {
            scanf("%s %s %d", &stu[i].id,&stu[i].name,&stu[i].score);
        }
        printf("Case %d:\n",num);
        if(C==1){
            sort(stu,stu+N,cmp1);
            for(int i=0;i<N;i++){
                printf("%s %s %d\n",stu[i].id,stu[i].name,stu[i].score);
            }
        }
        else if(C==2){
            sort(stu,stu+N,cmp2);
            for(int i=0;i<N;i++){
                printf("%s %s %d\n",stu[i].id,stu[i].name,stu[i].score);
            }
        }
        else if(C==3){
            sort(stu,stu+N,cmp3);
            for(int i=0;i<N;i++){
                printf("%s %s %d\n",stu[i].id,stu[i].name,stu[i].score);
            }
        }
        
    }
#ifdef LOCAl	//输入输出重定向
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

文章来源: blog.csdn.net,作者:沧夜2021,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/CANGYE0504/article/details/112451704

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。