【OJ】(二)---D---列排序

来源:互联网 发布:淘宝店铺如何添加背景 编辑:程序博客网 时间:2024/06/05 01:19


题目要求如下:

-----------------------------------------------------------------------------------------------------------------------------------------------

代码如下:

/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 作    者:  沈远宏 * 完成日期:2014 年06月111日 * 版 本 号:v1.0 * 问题描述:对一组纪录按任意指定列排序。现请你编写程序实现该功能。已给定类部分代码,不可删除和修改已有代码,只可以扩充。Input测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。Output对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。*/#include <iostream>#include <cstring>#include <fstream>using namespace std;class colSort{public:    enum {MAXREC=100000};    string no[MAXREC];    string name[MAXREC];    int score[MAXREC];    int recnum; //记录数目public:    void set(int n);    void sort(int index);//index =1,2,3; 按第index列排序    void output(int index);};void colSort::set(int n){    recnum=n;    for(int i=0; i<recnum; ++i)    {        cin>>no[i];        cin>>name[i];        cin>>score[i];    }}void colSort::sort(int index){    string n;    string na;    int s;    switch(index)    {    case 1:        for(int j=0; j<recnum-1; ++j)        {            for(int i=0; i<recnum-j-1; ++i)            {                if(no[i]>no[i+1])                {                    n=no[i],no[i]=no[i+1],no[i+1]=n;                    na=name[i],name[i]=name[i+1],name[i+1]=na;                    s=score[i],score[i]=score[i+1],score[i+1]=s;                }            }        }        break;    case 2:        for(int j=0; j<recnum-1; ++j)        {            for(int i=0; i<recnum-j-1; ++i)            {                if(name[i]>name[i+1])                {                    n=no[i],no[i]=no[i+1],no[i+1]=n;                    na=name[i],name[i]=name[i+1],name[i+1]=na;                    s=score[i],score[i]=score[i+1],score[i+1]=s;                }                else if(name[i]==name[i+1])                    if(no[i]>no[i+1])                    {                        n=no[i],no[i]=no[i+1],no[i+1]=n;                        na=name[i],name[i]=name[i+1],name[i+1]=na;                        s=score[i],score[i]=score[i+1],score[i+1]=s;                    }            }        }        break;    case 3:        for(int j=0; j<recnum-1; ++j)        {            for(int i=0; i<recnum-j-1; ++i)            {                if(score[i]>score[i+1])                {                    n=no[i],no[i]=no[i+1],no[i+1]=n;                    na=name[i],name[i]=name[i+1],name[i+1]=na;                    s=score[i],score[i]=score[i+1],score[i+1]=s;                }                else if(score[i]==score[i+1])                    if(no[i]>no[i+1])                    {                        n=no[i],no[i]=no[i+1],no[i+1]=n;                        na=name[i],name[i]=name[i+1],name[i+1]=na;                        s=score[i],score[i]=score[i+1],score[i+1]=s;                    }            }        }        break;    }}void colSort::output(int index){    switch(index)    {    case 1:        cout<<"Case 1:"<<endl;        break;    case 2:        cout<<"Case 2:"<<endl;        break;    case 3:        cout<<"Case 3:"<<endl;        break;    }    for(int i=0; i<recnum; i++)    {        cout<<no[i]<<" "<<name[i]<<" "<<score[i]<<endl;    }}int main(){    int n,c;    colSort s;    freopen("D.txt","r",stdin);    while(cin>>n>>c)    {        if(n==0)            break;        s.set(n);        s.sort(c);        s.output(c);    }    return 0;}

运行结果:


OJ要求结果输出例样:


0 0
原创粉丝点击