您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 1浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

用面向对象解决问题(洛谷P1093题题解,Java语言描述)

星拱北辰 发布时间:2020-01-25 00:06:53 ,浏览量:1

题目链接

P1093题目链接

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

分析

我们需要排序,不如用TreeMap或者TreeSet,但有三个关键词,所以确实不好办。 斟酌再三,决定用TreeSet,而且将三个属性完全封装为一个类而不是一个1对2(元素数量)的映射关系,反而简单一些。 这样,我们利用面向对象的类,简化了问题的复杂度:

    private static class Grade {
        Integer num;
        Integer chinese;
        Integer grade;
        public Grade(int num, int chinese, int grade) {
            this.num = num;
            this.chinese = chinese;
            this.grade = grade;
        }
    }

我们根本不关注数学和英语成绩(在总分计算之后),所以不需要存储。

最后输出的话,因为题意暗示不会出现小于5人的状况,所以不需要担心,加一个counter,到5就break循环就好啦。

TreeMap需要自己制定排序规则,如下:

        Set set = new TreeSet(new Comparator() {
            @Override
            public int compare(Grade grade1, Grade grade2) {
                int result1 = -grade1.grade.compareTo(grade2.grade);
                if (result1 != 0) {
                    return result1;
                }
                int result2 = -grade1.chinese.compareTo(grade2.chinese);
                if (result2 != 0) {
                    return result2;
                }
                return grade1.num.compareTo(grade2.num);
            }
        });

正负号一定要弄明白哈,别搞错啦!!

AC代码(Java语言描述)

在这里插入图片描述

import java.util.*;

public class Main {

    private static class Grade {
        Integer num;
        Integer chinese;
        Integer grade;
        public Grade(int num, int chinese, int grade) {
            this.num = num;
            this.chinese = chinese;
            this.grade = grade;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = Integer.parseInt(scanner.nextLine());
        Set set = new TreeSet(new Comparator() {
            @Override
            public int compare(Grade grade1, Grade grade2) {
                int result1 = -grade1.grade.compareTo(grade2.grade);
                if (result1 != 0) {
                    return result1;
                }
                int result2 = -grade1.chinese.compareTo(grade2.chinese);
                if (result2 != 0) {
                    return result2;
                }
                return grade1.num.compareTo(grade2.num);
            }
        });
        for (int i = 1; i             
关注
打赏
1660750074
查看更多评论
0.0412s