zoukankan      html  css  js  c++  java
  • ACM&排序问题,操作符重载

    题目描述:
        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 
    时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
    样例输入:
    3 1
    000007 James 85
    000010 Amy 90
    000001 Zoe 60
    4 2
    000007 James 85
    000010 Amy 90
    000001 Zoe 60
    000002 James 98
    4 3
    000007 James 85
    000010 Amy 90
    000001 Zoe 60
    000002 James 90
    0 0
    样例输出:
    Case 1:
    000001 Zoe 60
    000007 James 85
    000010 Amy 90
    Case 2:
    000010 Amy 90
    000002 James 98
    000007 James 85
    000001 Zoe 60
    Case 3:
    000001 Zoe 60
    000007 James 85
    000002 James 90
    000010 Amy 90

    http://ac.jobdu.com/problem.php?pid=1023
     1 #include <iostream>
     2 #include <string>
     3 #include <algorithm>
     4 #define NUMSIZE 100010
     5 
     6 using namespace std;
     7 int Mode;
     8 class Stu_index {
     9     public:
    10         string num;
    11         string name;
    12         int score;
    13         Stu_index(){
    14         }
    15         Stu_index(string num,string name, int score) {
    16             this->num = num;
    17             this->name = name;
    18             this->score = score;
    19         }
    20         friend bool operator < (const Stu_index& a, const Stu_index& b) {
    21             if(Mode == 1)
    22                 return a.num<b.num;
    23             if(Mode == 2)
    24                 if(a.name!=b.name)  return a.name<b.name;
    25                 else return a.num<b.num;
    26             if(Mode == 3)
    27                 if(a.score!=b.score)    return a.score<b.score;
    28                 else return a.num<b.num;
    29         }
    30         friend bool operator > (const Stu_index& a, const Stu_index& b) {
    31             if(Mode == 1)
    32                 return a.num>b.num;
    33             if(Mode == 2)
    34                 if(a.name!=b.name)  return a.name>b.name;
    35                 else return a.num>b.num;
    36             if(Mode == 3)
    37                 if(a.score!=b.score)    return a.score>b.score;
    38                 else return a.num>b.num;
    39         }
    40         friend ostream &operator<< (ostream &os, const Stu_index &item) {
    41             os<<item.num<<" "<<item.name<<" "<<item.score;
    42             return os;
    43         }
    44 };
    45 /*void quicksort(Stu_index v[], int left, int right) {
    46     if(left<right) {
    47         Stu_index key = v[left];
    48         int low = left;
    49         int high = right;
    50         while(low<high) {
    51             while(low<high && v[high]>key) high--;
    52             v[low] = v[high];
    53             while(low<high && v[low]<key) low++;
    54             v[high] = v[low];
    55         }
    56         v[low] = key;
    57         quicksort(v, left, low-1);
    58         quicksort(v, low+1, right);
    59     }
    60 }*/
    61 int main(void) {
    62     int N, C;
    63     C=0;
    64     Stu_index s[NUMSIZE];
    65     while(cin>>N && N!=0) {
    66         C++;
    67         cin>>Mode;
    68         for(int i=0; i<N; i++) {
    69             cin>>s[i].num>>s[i].name>>s[i].score;
    70         }
    71         //quicksort(s, 0, N-1);
    72         sort(s, s+N);
    73         cout<<"Case "<<C<<":"<<endl;
    74         for(int i=0; i<N; i++)
    75             cout<<s[i]<<endl;
    76     }
    77     return 0;
    78 }
    View Code
    
    

    这里使用了重载操作符,但类中的静态变量在没有初始化的时候类中的方法是无法使用改变量的,于是我将Mode改成了全局变量。

    
    
  • 相关阅读:
    sqlserver2005存储汉字成问号解决办法:
    .net c# 日期格式和常用处理
    文件夹无法访问拒绝访问,无法删除文件的,快速有效解决方法
    打印出所有的 info.plist 中的 keys、values
    利用时间戳来准确计算某个时间点具现在的时间差
    项目中的技巧经验汇总
    "Base SDK Missing"问题的解决
    UIPopoverController的使用
    给ios自带控件添加圆角边的方法
    实现程序内截屏功能的代码
  • 原文地址:https://www.cnblogs.com/wizzhangquan/p/4032156.html
Copyright © 2011-2022 走看看