题解 | #成绩排序#

成绩排序

http://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

import java.util.Arrays;
import java.util.Scanner;
//这个题因为可能会有多个名字或者成绩相同的学生,所以用map或者set接口都不太合适
//因此直接使用双重for循环记录指针的方式解决问题
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//录入的学生人数
        int m = sc.nextInt();//排列方式
        String [] str = new String[n];
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            str[i] = sc.next();//录入学生姓名
            arr[i] = sc.nextInt();//录入与每个学生名字相对应的成绩
        }
        int[] arrClone = arr.clone();//复制一次学生成绩
        Arrays.sort(arrClone);//将复制后的成绩按升序排列
        if (m==1) {//题目要求升序时:
            for (int i = 0; i < n; i++) {//双重for循环,外循环是复制后的成绩,也就是升序排序的成绩
                for (int j = 0; j < n; j++) {//内循环是原先输入的成绩,
                    if (i!=0 && arrClone[i]==arrClone[i-1]){//当有多个成绩一样时,跳过
                        break;
                    }
                    if (arrClone[i] == arr[j]) {//升序排列后的成绩数组与原成绩数组相一致时
                        System.out.println(str[j] + " " + arrClone[i]);//输出该成绩和该学生的名字
                    }
                }
            }
        }else {//题目要求降序时:
            for (int i = n-1; i >=0; i--) {//降序同上
                for (int j = 0; j < n; j++) {
                    if (i!=n-1 && arrClone[i]==arrClone[i+1]){
                        break;
                    }
                    if (arrClone[i]==arr[j]){
                        System.out.println(str[j]+" "+arrClone[i]);
                    }
                }
            }
        }
    }
}

全部评论

相关推荐

评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务