Java 华为真题-选修课

2023-09-14 10:53:10

需求:

     现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序,成绩相同时按照学生的学号升序排序。

输入描述

        第一行为第一门选修课学生的成绩

        第二行为第二门选修课学生的成绩,每行数据中学生之间以英文分号分隔,每个学生的学号和成绩以英文逗号分隔,学生学号的格式为8位数字(2位院系编号+入学年份后2位+院系内部1位专业编号+所在班级3位学号),学生成绩的取值范围为[0,100]之间的整数,两门选修课选修学生数的取值范围为[1-2000]之间的整数。

输出描述

        同时选修了两门选修课的学生的学号,如果没有同时选修两门选修课的学生输出NULL,否则,先按照班级划分,班级编号小的先输出,每个班级先输出班级编号(学号前五位),然后另起一行输出这个班级同时选修两门选修课的学生学号,学号按照要求排序(按照两门选修课成绩和的降序,成绩和相同时按照学号升序),学生之间以英文分号分隔。

输入:

01202021,75;01201033,95;01202008,80;01203006,90;01203088,100

01202008,70;01203088,85;01202111,80;01202021,75;01201100,88

输出:

01202

01202008;01202021

01203

01203088

编码:

ublic class SelectCourse {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //输入字符串数据
        String[] strs_1 = scanner.nextLine().split(";");
        String[] strs_2 = scanner.nextLine().split(";");
        //集合
        List<Students> list1 = parseData(strs_1);
        List<Students> list2 = parseData(strs_2);
        //集合
        Set<String> sets = new HashSet<>();
        //调用方法
        List<Students> list =sameCourse(list1,list2,sets);
        //sets排序,转换成List
        List<String> my =new ArrayList<>(sets);
        Collections.sort(my);

        //调用排序方法
        getComparator(list,my);

    }

    /**
     * 1.获取学生信息
     *
     * @param strs
     * @return
     */
    private static List<Students> parseData(String[] strs) {
        List<Students> list = new ArrayList<>();
        //循环
        for (int i = 0; i < strs.length; i++) {
            //分割字符串
            String[] ss = strs[i].split(",");
            //将对象添加集合中
            list.add(new Students(ss[0], Integer.parseInt(ss[1])));
        }
        return list;
    }

    /**
     * (2) 统计同时选修两门选修课的学生信息
     * @param list1  第一门选修课学生的成绩
     * @param list2  第二门选修课学生的成绩
     * @param sets  学号前五位
     * @return
     */
    public static List<Students> sameCourse(List<Students> list1, List<Students> list2, Set<String> sets) {
        List<Students> list = new ArrayList<>();
        //循环比较
        for (Students stu1 :
                list1) {
            for (Students stu2 :
                    list2) {
                //判断学号是否相同
                if (stu1.getNo().equals(stu2.getNo())) {
                    //累计成绩和
                    int sum = stu1.getScore() + stu2.getScore();
                    //添加到集合中
                    list.add(new Students(stu1.getNo(), sum));

                    //截取学号前五位-存入set集合中,过滤重复的
                    String strNo = stu1.getNo().substring(0, 5);
                    sets.add(strNo);
                }
            }
        }
        //判断如果没有,则返回NULL
        if (list.size() == 0) {
            System.out.println("NULL");
        }
        return list;
    }

    /**
     * (3) 学号按照要求排序(按照两门选修课成绩和的降序,成绩和相同时按照学号升序
     * @param list
     * @param sets
     */
    public static void getComparator(List<Students> list,List<String> sets){
        //外部排序
        Collections.sort(list,new Comparator<Students>(){
            @Override
            public int compare(Students o1, Students o2) {
                //升序
                return Integer.valueOf(o1.getNo())-Integer.valueOf(o2.getNo());
            }
        });

        //输出信息
        for (String str:
             sets) {
            System.out.println(str);
            //对象
            StringBuilder builder=new StringBuilder();
           //循环
            for (Students lls:
                 list) {
                //是否相等
                if(str.equals(lls.getNo().substring(0,5))){
                   builder.append(lls.getNo()).append(";"); //添加
                }
            }
            System.out.println(builder.toString());
        }
    }



}

//学生类
class Students {
    private String no;
    private int score;
    
    .....setXXX and getXXX......

    public Students(String no, int score) {
        this.no = no;
        this.score = score;
    }

    @Override
    public String toString() {
        return no + "=>" + score;
    }
}

效果:

 

更多推荐

链式法则:概率论描述语言模型

目录1.事件相互独立2.链式法则3.示例4.语言模型中的链式法则1.事件相互独立事件相互独立就是:一个事件的发生与否,不会影响另外一个事件的发生。当a和b两个事件互相独立时,有:P(a|b)=P(a)推广到3个事件就有下面这个公式:P(a|b,c)=P(a|c)其中:P(a|b,c)表示在b和c事件都发生的情况下,a事

特征融合篇 | YOLOv8 引入中心化特征金字塔 EVC 模块 | 《Centralized Feature Pyramid for Object Detection》

论文地址:https://arxiv.org/pdf/2210.02093.pdf代码地址:https://github.com/QY1994-0919/CFPNet视觉特征金字塔在广泛的应用中展示了其在效果和效率上的优越性。然而,现有的方法过于关注层间特征之间的交互,而忽视了层内特征的调节,而这些调节在经验上被证明是

springboot配置注入增强(二)属性注入的原理

一原理1配置的存储springboot在启动的时候会后构建一个org.springframework.core.env.Environment类型的对象,这个对象就是用于存储配置,如图springboot会在启动的最开始创建一个Environment对象这个webApplicationType的枚举是在newSprin

Java面向对象编程

对于IP地址130.63.160.2,MASK为255.255.255.0,子网号为()A.160.2B.160C.63.160D.130.63.160答案:B将网络物理地址转换为IP地址的协议是()A.IPB.ICMPC.ARPD.RARP答案:D有关cookie和session的描述,下面错误的是()A.cooki

如何在外网访问公司项目?快解析实现内网ip让公网连接

随着互联网技术的不断发展,越来越多的企业和个人选择使用服务器进行网站或应用程序的部署。公司内部项目需要提供外网访问是个常见的网络场景,需要怎么操作设置也是网络或项目人员需要关注的。企业使用服务器搭建公司业务系统一般会使用云服务器或者使用本地的服务器,有时候,我们需要让外部网络访问本地服务器。然而,由于大多数服务器都是在

Linux下的系统编程——守护进程、线程(十二)

前言:我们知道进程拥有一个PCB,在Linux中被称为task_struct,并且有一个进程地址空间,也有一个页表,通过页表指向物理内存,但是从今天开始,对进程的概念可能发生变化,这个我们后边来说,在Linux中,并没有真正的线程,而是使用进程的PCB来模拟线程,也就是说一个线程在创建时,只会去创建一个PCB,而这个P

【用unity实现100个游戏之13】复刻类泰瑞利亚生存建造游戏

文章目录前言素材人物瓦片一、建造系统1.定义物品类2.绘制地图3.实现瓦片选中效果4.限制瓦片选择5.放置物品功能6.清除物品7.生成和拾取物品功能二、库存系统源码完结前言本文来实现一个类泰瑞利亚游戏的demo,其中主要包括经典的库存系统和建造系统素材人物https://assetstore.unity.com/pac

使用自定义注解发布webservice服务

使用自定义注解发布webservice服务概要代码自定义注解WebService接口服务发布配置使用结果概要在springboot使用webservice,发布webservice服务的时候,我们经常需要手动在添加一些发布的代码,比如:@BeanpublicEndpointorganizationEndpoint(){

Redis 篇

1、为什么要用缓存?使用缓存的目的就是提升读写性能。而实际业务场景下,更多的是为了提升读性能,带来更好的性能,带来更高的并发量。Redis的读写性能比Mysql好的多,我们就可以把Mysql中的热点数据缓存到Redis中,提升读取性能,同时也减轻了Mysql的读取压力。2、什么是Redis?Redis是一个开源(BSD

嵌入式:驱动开发 Day9

作业:通过platform总线驱动实现a.应用程序通过阻塞的io模型来读取number变量的值b.number是内核驱动中的一个变量c.number的值随着按键按下而改变(按键中断)例如number=0按下按键number=1,再次按下按键number=0d.在按下按键的时候需要同时将led1的状态取反e.驱动中需要编

树莓派使用Nginx 搭建轻量级网站远程访问

文章目录1.Nginx安装2.安装cpolar3.配置域名访问Nginx4.固定域名访问5.配置静态站点转载自cpolar极点云文章:树莓派使用Nginx搭建轻量级网站远程访问安装Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的Web服务器,可以用于托管网站或Web应用程序。相比其他Web服务器,

热文推荐