【九度】题目1196:成绩排序

来源:互联网 发布:php 二进制字符串文件 编辑:程序博客网 时间:2024/06/05 12:40
题目地址:http://ac.jobdu.com/problem.php?pid=1196
题目描述:

用一维数组存储学号和成绩,然后,按成绩排序输出。

输入:

输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。

输出:

按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。

样例输入:
31 902 873 92
样例输出:
2 871 903 92
来源:
2009年华中科技大学计算机研究生机试真题
所谓的一维数组是不是结构体?
我暂且认为是这样吧。
这道题是不是和Joddu上所有的涉及成绩排序的基本一样。改改代码就是答案。
关键是得知道原理是怎样的。
#include <stdio.h>#include <algorithm>using namespace std;const int maxn = 102;  struct Student{    int stuNo;    int score;}students[maxn];  int n , i;  bool cmp(Student s1 , Student s2){    if(s1.score == s2.score){         return s1.stuNo < s2.stuNo;    }else {        return s1.score < s2.score;    }}int main(){    while(scanf("%d",&n) != EOF){        for(i = 0; i < n; i++){            scanf("%d %d",&students[i].stuNo,&students[i].score);        }        sort(students, students+n, cmp);        for(i = 0; i < n; i++){            printf("%d %d\n",students[i].stuNo,students[i].score);        }    }    return 0;}/**************************************************************    Problem: 1196    User: wangzhenqing    Language: C++    Result: Accepted    Time:40 ms    Memory:1020 kb****************************************************************/

Java AC

import java.util.Arrays;import java.util.Scanner;  public class Main{    public static void main(String[] args)  {        Scanner scanner = new Scanner(System.in);        while (scanner.hasNext()) {            int n = scanner.nextInt();            Student[] students = new Student[n];            for (int i = 0; i < n; i++) {                students[i] = new Student(scanner.nextInt(), scanner.nextInt());            }            Arrays.sort(students);            for (int i = 0; i < students.length; i++) {                System.out.println(students[i].getSeq()+" "+students[i].getScore());            }        }    }  }   class Student implements Comparable<Student>{    private int seq;    private int score;      public Student(int seq, int score) {        super();        this.seq = seq;        this.score = score;    }    public int getScore() {        return score;    }    public void setScore(int score) {        this.score = score;    }    public int getSeq() {        return seq;    }    public void setSeq(int seq) {        this.seq = seq;    }    public int compareTo(Student o) {        if(this.score!=o.score){            return this.score-o.score;        }else {            return this.seq-o.seq;        }    }   }/**************************************************************    Problem: 1196    User: wzqwsrf    Language: Java    Result: Accepted    Time:1950 ms    Memory:144068 kb****************************************************************/
原创粉丝点击