原创

输出每个成绩在全班所有成绩中的排名

温馨提示:
本文最后更新于 2022年10月25日,已超过 549 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

题目

现在老师手上有本班成绩单列表,列出了班级里每个同学的考试成绩,是无序排列的,
现在要求输出每个成绩在全班所有成绩中由高到低的排名,排名最高的从1开始
需要考虑成绩相同并列排名的情况
输入
一个整数数组,每个元素表示一个学生考试成绩
输出
一个整数数组,每个元素是输入数组对应元素在全班成绩的排名
输入样例
[99,89,92,89,85]
输出样例
[1,3,2,3,5]

实现思路

先通过一种排序方式把输入的成绩进行排序
然后挨个遍历没有进行排序的成绩,在已排序的成绩找到它,在第几个找到那么该成绩的排名就是多少
最后需要注意的是,相同的成绩排名相同,通过map来实现的,key为成绩,value为该成绩的排名

详细看代码,结合注释应该可以很好的理解

代码实现

 @Test
    public void test02() {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        String[] split = str.substring(1, str.length() - 1).split(",");
        int [] input = new int[split.length]; // 用于排序的数组
        int[] copyInput = new int[split.length]; // 复制一份原数组

        for (int i = 0; i < split.length; i++) {
            input[i] = Integer.valueOf(split[i]);
            copyInput[i] = Integer.valueOf(split[i]);
        }

        int[] orders = new int[input.length]; // 各个成绩的排名
        HashMap map = new HashMap(); // 通过map来保存相同成绩的排名

        // 冒泡排序
        for (int i = 0; i < input.length; i++) {
            for (int j = i+1; j < input.length; j++) {
                if (input[i]< input[j]) {
                    int tmp = input[i];
                    input[i] = input[j];
                    input[j] = tmp;
                }

            }
        }

        // 需要输出排序前各个成绩的排名,所以需要有排序前各个成绩
        for (int i = 0; i < copyInput.length; i++) {
            // 遍历排序前每个成绩,并从排序后的数组找找到改成绩,在第几个找到它的排名就是多少
            for (int j = 0; j < input.length; j++) {
                if (copyInput[i] == input[j]) {
                    if (map.containsKey(copyInput[i])) {  // 先从map中查找是否有相同成绩
                        orders[i] = (int) map.get(copyInput[i]); // 有的话就和之前的排名相同
                        break;
                    }
                    orders[i] = j+1;
                    map.put(copyInput[i], j+1); // 找到改成绩将其加到map中并存它的排名
                    break;
                }
            }
        }
        StringBuffer sb = new StringBuffer("[");

        for (int i = 0; i < orders.length; i++) {
            sb.append(orders[i]);
            if (i != orders.length-1) {
                sb.append(",");
            }

        }

        sb.append("]");
        System.out.println(sb);
    }

file

最后,祝各位程序猿节日快乐!!!

正文到此结束
本文目录