1028. List Sorting (25) java

来源:互联网 发布:2015年nba新秀体测数据 编辑:程序博客网 时间:2024/06/03 04:52

https://www.patest.cn/contests/pat-a-practise/1028

//C版

#include <bits/stdc++.h>using namespace std;struct node {  int ID;  char name[10];  int grade;};bool cmp1(node a, node b) {  return a.ID <= b.ID; }bool cmp2(node a, node b) {  if ( strcmp(a.name, b.name) == 0 ) return a.ID <= b.ID;  return (strcmp(a.name, b.name) < 0);}bool cmp3(node a, node b) {  if ( a.grade == b.grade ) return a.ID <= b.ID;  return a.grade <= b.grade;}int main(){  int n, d;  while ( cin >> n >> d ) {    node a[n];    for ( int i = 0; i < n; i++ ) {      scanf("%d %s %d", &a[i].ID, a[i].name, &a[i].grade);    }    if ( d == 1 ) sort(a, a+n, cmp1);    else if ( d == 2) sort(a, a+n, cmp2);    else sort(a, a+n, cmp3);    //result    for ( int i = 0; i < n; i++ ) {      printf("%06d %s %d\n", a[i].ID, a[i].name, a[i].grade);     }  }  return  0;}

//C++版

#include <bits/stdc++.h>using namespace std;typedef struct node{    int ID;    char Name[10];    int Grade;}Node;vector<Node> ResultList;bool cmp1(const node a, const node b){    return a.ID < b.ID;}bool cmp2(const node a, const node b){    //char 类型字符创比较大小 用strcmp    if (strcmp(a.Name, b.Name) == 0)    {        return a.ID < b.ID;    }    else return strcmp(a.Name, b.Name) < 0;}bool cmp3(const node a, const node b){    if (a.Grade == b.Grade)    {        return a.ID < b.ID;    }    else return a.Grade < b.Grade;}void sortwith(int n, int k){    for (int i = 0; i < n; i++)    {        node k;        scanf("%d %s %d", &k.ID, k.Name, &k.Grade);        ResultList.push_back(k);    }    switch (k)    {    case 1://        sortwithID();        sort(ResultList.begin(), ResultList.end(), cmp1);        break;    case 2://        sortwithName();        sort(ResultList.begin(), ResultList.end(), cmp2);        break;    case 3://        sortwithGrade();        sort(ResultList.begin(), ResultList.end(), cmp3);        break;    default:        break;    }}void printSortResult(int n){    for (int i = 0; i < n; i++)    {        printf("%06d %s %d\n", ResultList[i].ID, ResultList[i].Name, ResultList[i].Grade);    }}int main(){    int n, k;    while (~scanf("%d %d", &n, &k))    {        ResultList.clear();        sortwith(n, k);        printSortResult(n);    }    return 0;}

//Java版,最后一点貌似超时,最好C/C++

import java.util.*;public class Main {    static class Student {        int id;        String name;        int grade;        Student(int id, String name, int grade) {            this.id = id;            this.name = name;            this.grade = grade;        }    }    public static void main(String[] args) {        List<Student> list = new ArrayList<Student>();        int n, d;        Scanner in = new Scanner(System.in);        n = in.nextInt();        d = in.nextInt();        for ( int i = 0; i < n; i++ ) {            int id = in.nextInt();            String name = in.next();            int grade = in.nextInt();            list.add(new Student(id, name, grade));        }        if ( d == 1 ) {            sort(1, list);        } else if ( d == 2){            sort(2, list);        } else {            sort(3, list);        }        for ( int i = 0; i < n; i++ ) {            Student cas = list.get(i);            System.out.printf("%06d %s %d", cas.id, cas.name, cas.grade);            System.out.println();        }    }    static void sort(int re, List<Student> list) {        if ( re == 1 ) {            Collections.sort(list, new comparator1());        } else if ( re == 2 ) {            Collections.sort(list, new comparator2());        } else {            Collections.sort(list, new comparator3());        }    }    static class comparator1 implements Comparator<Student> {        @Override        public int compare(Student o1, Student o2) {            // TODO Auto-generated method stub            return (o1.id - o2.id) <= 0 ? -1 : 1;        }    }    static class comparator2 implements Comparator<Student> {        @Override        public int compare(Student o1, Student o2) {            // TODO Auto-generated method stub            if ( o1.name.equals(o2.name) ) return (o1.id - o2.id) <= 0 ? -1 : 1;            return o1.name.compareTo(o2.name);        }    }    static class comparator3 implements Comparator<Student> {        @Override        public int compare(Student o1, Student o2) {            // TODO Auto-generated method stub            if ( o1.grade == o2.grade ) return (o1.id - o2.id) <= 0 ? -1 : 1;            return (o1.grade - o2.grade <= 0) ? -1 : 1;        }    }}
0 0