L1-043 阅览室(java)

2023-10-30

1. 题目描述

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。

注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

输入格式:

输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:

书号([1, 1000]内的整数) 键值SE发生时间hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)

每一天的纪录保证按时间递增的顺序给出。

输出格式:

对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

输入样例:

3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00

输出样例:

2 196
0 0
1 60

2. 分析

将图书的书号作为键, 图书借出的时间作为值将借出的书存储再HashMap中, 然后还书的时候查询该书是否被借出, 若没有被借出, 则视为无效数据, 若被借出了, 现在需要还掉, 所以把该数据移出HashMap
这个很重要, 否则第一个测试点会通不过, 第一个测试点就是: 如果有多条借出数据, 以最后一条为准,如果有多条还书数据, 以第一条为准
因为HashMap存入数据, 如果键相同的情况下, 值会自动更新, 所以存入数据没有什么问题, 就是还书之后要将数据remove

3. 代码示例

import java.io.*;
import java.util.HashMap;

public class 阅览室 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        //定义一个HashMap,用于记录读者借阅还没有还的书籍
        HashMap<Integer, String> map = new HashMap<>();
        //记录读者借阅次数
        int count = 0;
        //计算总每天的阅读时间
        int sum = 0;
        while(n > 0){
            String[] line = bf.readLine().split(" ");
            int bookId = Integer.parseInt(line[0]);
            //当输入书号为0表示结束一天的工作
            if(bookId == 0){
                //计算这一天当中读者阅读次数和平均阅读时间
                if(sum == 0){
                    System.out.println(count + " " + 0);
                }else{
                    System.out.println(count + " " + (int)Math.round(1.0 * sum / count));
                }
                //清空map,开始计算新的一天的记录
                map.clear();
                count = 0;
                sum = 0;
                n--;
                continue;
            }
            //如果有多个借书记录数据,则以最后一个借书的数据为准
            //当读者借阅书籍
            if("S".equals(line[1])){
                map.put(bookId,line[2]);
            }
            //如果有多个还书的记录数据,则以第一个还书的数据为准
            //当该书籍被借阅,读者还书籍
            else if(map.containsKey(bookId) && "E".equals(line[1])){
                //计算该本书被阅读时间
                String[] t1 = map.get(bookId).split(":");
                String[] t2 = line[2].split(":");
                int hour = Integer.parseInt(t2[0]) - Integer.parseInt(t1[0]);
                int second = Integer.parseInt(t2[1]) - Integer.parseInt(t1[1]);
                sum += hour * 60 + second;
                //书被阅读一次
                count++;
                //书被还掉了,将该书籍清除
                map.remove(bookId);
            }
        }
    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

L1-043 阅览室(java) 的相关文章

随机推荐

  • tensorflow笔记【9】深度学习-几个经典网络的基本结构

    tensorflow笔记 9 深度学习 几个经典网络的基本结构 文章目录 前言 一 卷积神经网络 二 经典网络结构 1 自制CNN 2 LeNet 3 AlexNet 4 VGGNet 5 InceptionNet 6 ResNet 总结
  • Java - Java基础(一)

    一 计算机基础知识 1 计算机简介 第一台通用计算机 ENIAC 2 数据的存储和运算 计算机中对于数据的存储和运算 都是通过二进制数据来完成 3 人机交互方式 图形化界面 DOS命令行 D 切换盘符 dir 查看当前路径下的文件信息 cd
  • Android中的drawable像素密度适配详解

    本文大纲 1 为什么要分drawable xxx目录 2 Bitmap的介绍 3 不同drawable xxx中的图片内存测试 1 为什么要分drawable xxx目录 android项目资源中对于drawable文件夹可以分为以下类型的
  • 【Transformer】10、HRFormer:High-Resolution Transformer for Dense Prediction

    文章目录 一 背景 二 方法 三 效果 论文链接 https arxiv org abs 2110 09408 代码链接 https github com HRNet HRFormer 一 背景 ViT 的提出让人们看到了 Transfor
  • 一文弄懂神经网络中的BP反向传播算法

    注 本文转自 一文弄懂神经网络中的BP反向传播算法 Charlotte77 博客园 安利 Charlotte77 的深度学习系列博客 最近在看深度学习的东西 一开始看的吴恩达的UFLDL教程 英文版 有中文版就直接看了 后来发现有些地方总是
  • 网卡中断优化

    1 中断的配置 root zxinos etc init d irq balancer status Checking for service irqbalance running etc init d irq balancer 是linu
  • 浅谈sleep、wait、yield、join区别

    sleep sleep 方法是属于 Thread 类中的 sleep 过程中线程不会释放锁 只会阻塞线程 让出cpu给其他线程 但是他的监控状态依然保持着 当指定的时间到了又会自动恢复运行状态 可中断 sleep 给其他线程运行机会时不考虑
  • 小甲鱼学python学习笔记

    一 序章 1 python缩进问题 if a 0 else while a 0 2 字符串拼接与控制台输入输出 input 可从控制台读入数据 括号内地字符串为输入时的提示 输入结果可通过变量保存 print 控制台输出 s input p
  • Linux 常用指令大全

    我是目录 1 指令格式 2 Windows 和 Linux 通用内容 3 路径的命令 1 cd 切换到某个目录 相对路径 绝对路径 2 pwd 显示当前路径 3 ls 列出目录下的所有子目录与文件 或 文件的信息 4 目录 文件的指令 1
  • 技术干货:解密最受欢迎的开源 Serverless 框架弹性技术实现

    Knative 是一款基于 Kubernetes 的开源 Serverless 应用编排框架 其目标是制定云原生 跨平台的 Serverless 应用编排标准 Knative 主要功能包括基于请求的自动弹性 缩容到 0 多版本管理 基于流量
  • 前端面试实习生(基础题)

    前言 经过一年的学习 我对vue框架有了清楚的认识 我就想着去找实习工作 这些天我投了100多份简历 接到了两个线上笔试 第一个面试题使用vue完成一个网页的模块 有要有分页与传输数据 这不重要 很容易写出来了 关键是第二个线上笔试题 很基
  • [iOS]深入浅出 iOS 之多线程 NSThread

    线程专题 http www cocoachina com bbs read php tid 43852 OS 支持多个层次的多线程 编程 层次越高的抽象程度越高 使用起来也越方便 也是苹果最推荐使用的方法 下面简要说明这三种不同范式 Thr
  • Netjs框架基础

    一 框架介绍 Nestjs 是以用于构建高可用可伸缩的后端应用框架 并且全面支持 Typescript 在背后 Nestjs 使用了强大的 http 框架 默认是 express 并且可以配置选择其他的 Http 服务框架 二 Contro
  • simswap安装过程中遇到的一些问题

    simswap与deepfacelab很像 但是simswap的泛用性远强于deepfacelab 个人认为simswap名气不如deepfacelab的原因有以下几点 1 缺乏发行版 2 缺乏文档 3 最终训练效果不一定好 本文旨在记录一
  • 它们把色情版 “微信” 的底裤都给挖出来了,网友: 草率了。。。

    作者 暗影安全实验室 来源 anquanke com post id 219729 背景 近日 恒安嘉新暗影安全实验室平台监测到一款名为 乐宝 的仿冒应用 安全研究人员第一时间对该应用进行了研究分析 发现该应用表面上是一款与微信具有相似页面
  • wireshark 导出指定tcp流的数据包

    数据包回放时 如果我们只想将pcap包中的部分数据进行回放 怎么办呢 首先使用wireshark打开文件 在过滤器中进行过滤 比如我只想要tcp stream eq 0的数据 可以如下操作 过滤好数据 然后依次操作 文件 gt 导出特定分组
  • 离散余弦变换

    离散余弦变换 DCT for Discrete Cosine Transform 是与傅里叶变换相关的一种变换 它类似于离散傅里叶变换 DFT for Discrete Fourier Transform 但是只使用实数 离散余弦变换相当于
  • 三、PCL点云处理滤波器----(1)直通滤波器

    一 为什么要进行滤波 在获取点云数据时 由于设备精度 操作者经验 环境因素等带来的影响 以及电磁波衍射特性 被测物体表面性质变化和数据拼接配准操作过程的影响 点云数据中将不可避免地出现一些噪声点 实际应用中除了这些测量随机误差产生的噪声点之
  • ImportError: No module named cv2的完美解决方法!!!(不能太赞)

    此刻是2018年1月21日晚10点13分 我怀着激动的心情 从Ubuntu系统上登上我的CSDN博客然后发来贺电 祝贺我自己解决了ImportError No module named cv2的问题 这仿佛是从另一个世界 Ubuntu世界
  • L1-043 阅览室(java)

    1 题目描述 天梯图书阅览室请你编写一个简单的图书借阅统计程序 当读者借书时 管理员输入书号并按下S键 程序开始计时 当读者还书时 管理员输入书号并按下E键 程序结束计时 书号为不超过1000的正整数 当管理员将0作为书号输入时 表示一天工