Java 华为真题-选修课

news2024/11/20 11:24:28

需求:

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

输入描述

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

        第二行为第二门选修课学生的成绩,每行数据中学生之间以英文分号分隔,每个学生的学号和成绩以英文逗号分隔,学生学号的格式为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;
    }
}

效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

下载CentOS ISO镜像 (一)

总目录 https://preparedata.blog.csdn.net/article/details/132877836 文章目录 总目录一、下载CentOS 镜像 一、下载CentOS 镜像 官网下载&#xff1a;https://www.centos.org/download/ Centos Linux 和 CentOS Stream 的区别&#xff1a;https://www.centos.org/cl-vs-cs…

设计模式(2) - 创建型模式

创建型模式指的是 创建对象 或是 获取实例 的方式。 1、工厂模式 平时写一些简单的代码可能会直接用 new 创建出一个对象&#xff0c;但是实际在阅读一些功能比较多、规模比较庞大的工程时&#xff0c;可能会发现有多个类继承于同一个基类的情况&#xff0c;它们拥有同样的接口…

删除安装Google Chrome浏览器时捆绑安装的Google 文档、表格、幻灯片、Gmail、Google 云端硬盘、YouTube网址链接(Mac)

删除安装Google Chrome浏览器时捆绑安装的Google 文档、表格、幻灯片、Gmail、Google 云端硬盘、YouTube网址链接(Mac) Mac mini操作系统&#xff0c;安装完 Google Chrome 浏览器以后&#xff0c;单击 启动台 桌面左下角的“显示应用程序”&#xff0c;我们发现捆绑安装了 Goo…

ArcGis10.8安装教程!

1、找到arcgis10.8中文安装包和Crack破解文件夹 2、运行"ArcGIS.exe"程序&#xff0c;进入安装向导&#xff1b;默认路径点下一步 3、注意&#xff0c;需要Python 2.7、Numpy、Matplotlib的支持 4、建议取消此处的勾选&#xff0c;开始进行安装 5、安装完成 6、…

【npm】npm私有库的使用-绑定

注册npm账户 输入基本信息 验证 收一次性验证码 登录 本地绑定 全局绑定了其他的私有库 若要在专门发包的项目中&#xff0c;发包到自己的私有库&#xff0c;需要在项目文件夹中创建一个.npmrc文件 创建文件 可以直接在项目目录下输入touch .npmrc创建文件 文件内容 regi…

C++之保存编译全部中间文件(二百一十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

JavaScript学习笔记03

JavaScript笔记03 流程控制 if 判断 和 Java 中if语句的使用方法相同。例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script>"use strict"…

OPCAE扫盲

目录 1 基本概念 1.1 服务器/客户端 1.2 区域 1.3 报警/条件 1.4 事件 2 条件概念 2.1 子条件 2.2 OPCConditions属性 2.3 Condition质量 2.4 OPCSubConditions属性 2.5 Condition定义 2.6 严重性 2.7 Condition启用/禁用 2.8 Area启用/禁用 2.9 Condition状态集…

域控操作一:更换域用户桌面背景

1,创建背景图片文件夹并设置共享文件夹&#xff1a; 创建文件夹&#xff0c;将图片放进去&#xff0c;设置共享&#xff0c;权限改为Everyone 2&#xff0c;打开域控服务器设置组策略 在需要的组织单位OU内创建GPO设置名字为统一桌面背景 用户配置–管理模板–桌面–桌面 Act…

期权怎样的加仓才是合理的加仓?

期权加仓的手法是期权投资中常见的一种操作的手段,一般是在行情有大涨趋势的时候,投资者通过追加仓位来扩大收益和缩小持仓成本的策略&#xff0c;下文为大家介绍期权怎样的加仓才是合理的加仓&#xff1f;本文来自&#xff1a;期权酱 一、期权交易怎么加仓最合适&#xff1f;期…

[H5动画制作系列 ] Text及Button 的基础原理Demo

准备工作: 舞台上方是个动态文本框,名称为:myText,舞台下方是一个按钮元件(myButton)的实例,名称是:myButton1,当点击按钮时,能够在文本框上和控制台(console)输出:当前帧号以及全局i的变量值。建立两个图层,一个图层布局按钮和文本框,另一个图层专门部署代码。 操作步骤: 步…

WebGL 正确处理对象前后的关系——隐藏面消除(深度测试)/ 深度冲突

目录 前言 验证WebGL处理对象前后关系的规则——后绘制的图形覆盖先绘制的图形 隐藏面消除&#xff08;深度测试&#xff09; 开启隐藏面消除功能&#xff0c;需要遵循以下两步&#xff1a; 1.开启隐藏面消除功能。 gl.enable&#xff08;&#xff09;函数规范 2.在绘制…

计算机毕业设计 基于SSM的电影推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

zabbix 钉钉微信企微告警(动作操作消息内容模板)

一、环境配置 1、配置zabbix服务端 2、配置监控主机&监控项&监控模板 zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客 二、触发器 触发器的本质就是一个条件判断&#xff0c;对于不同的监控数据来说&#xff0c;我…

小剧场短剧影视小程序源码分享,搭建自己的短剧小程序

拥有一个属于自己的短剧小程序&#xff0c;是现代人追求创作梦想和与观众互动的新方式。近年来&#xff0c;小剧场短剧影视小程序的兴起为广大创作者提供了展示才华和与观众互动的平台。如果你也渴望搭建一个自己的短剧小程序&#xff0c;那么你来对地方了&#xff01;在本文中…

一个Python终端增强开源库

迷途小书童 读完需要 4分钟 速读仅需 2 分钟 1 简介 rich 是由 Will McGugan 开发的一个开源库&#xff0c;旨在提供更好的终端文本渲染和样式处理能力。它提供了丰富的文本格式化选项&#xff0c;包括颜色、粗体、斜体、下划线、对齐等。rich 不仅适用于命令行界面的美化&…

MYSQL 窗体汇总函数

如果我们想要汇总当天数据&#xff0c;当月数据&#xff0c;当年数据的。如果不懂窗体函数&#xff0c;可能会比较费劲&#xff0c;那小编就说了&#xff0c;我用java处理同样可以达到效果啊。可问题是。明明有现成的函数&#xff0c;为啥要用java处理&#xff0c;当然同时&…

【zlm】 webrtc源码讲解

目录 前端WEB 服务器收到请求 服务端的处理 播放 拉流 参考文章 前端WEB 服务器收到请求 POST /index/api/webrtc?applive&streamtest&typeplay HTTP/1.1 HttpSession::onRecvHeaderHttpSession::Handle_Req_POSTHttpSession::Handle_Req_POSTif (totalConte…

iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机?

iPhone苹果手机15机型区域版本识别代码 CH代码为国行 LL代码为美版 ZP代码为港版 iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机&#xff1f; 1、打开苹果iPhone15手机桌面上的「设置」&#xff1b; 2、在iPhone苹果15手机设置内找到「通用」并点击打开&…

MySQL修改时间添加时间自动更新

第一种: database.php设置 false改为true;然后看是使用的什么框架 如果是tp5需要数据库是create_time和update_time字段 laravel的话,需要的是created_at和updated_at字段 如果想自定义的话,就在model文件里加上 protected $createTime create_at;// 默认的字段为create_t…