PTA L1_043 阅览室(详解及坑点)

  • 阅览室
    • 一、问题再现
    • 二、问题分析
      • (一)、输入分析
      • (二)、规则分析
      • (三)、输出分析
    • 三、坑点分析
      • (一)、到底有多坑
      • (二)、测试点0,2
      • (三)、测试点1
      • (四)、测试点3
    • 四、代码实现
    • 五、作者相关
      • 作者简介
      • 联系方式

阅览室

一、问题再现

如果想直接看坑点的可以直接从第三大点看起!!!

问题链接: https://pintia.cn/problem-sets/994805046380707840/problems/994805087447138304

二、问题分析

写在前面:本着代码首先是写给人看的原则,代码和解析尽量通俗易懂,所以可能有点过于“接地气”,不适者请海涵。

首先,这题说了个啥呢,给你n天的数据,让你按他的狗 * 规则统计告诉它给定的天读者借书的次数以及平均的借书时间

(一)、输入分析

第一行输入有多少天;
接下来各行给出每天的借阅记录。

借阅记录咋给的呢,先告诉你书的id,相当于书名(这玩意儿不重复,并且范围从1到1000);然后输入操作类型,(借出去书S,还回来数E);最后输入操作的时间。

// 为了方便我们用一个结构体来处理每本书的情况
typedef struct Book
{int wasBorrow; // 书借出去了没有char operate; // 这条记录是借还是还int hour;int min;
}Book;

咋读取就不说了,应该都会。不过可以思考的是到底按照 每条数据来记录 还是按照 每本书来记录 的确值得稍稍考虑一番,显然是第二种,按照每本书来记录,毕竟人家连范围都给你了,并且范围也不大。
P.S. 如果用存储每条数据记录的话数组可能需要开到1500,也就是24*60=1440,并且不好处理,别问我咋知道的。

(二)、规则分析

唉,透露一下,这部分就是神坑的部分之一。
具体是啥规则呢,说人话就是这个记录的数据里面有好多都是无效的,找出有效的记录统计。
什么是无效的数据呢,就是没有借出去就还的,还有借出去不还的,这两种是无效的,不需要处理。但是同一本书借了还了,再借了再还了这是合理的,并且都得处理。
咋处理呢,就是统计 借书次数平均阅读时间

(三)、输出分析

经过处理后,输出第二步得出来的结果。如果借书次数等于零,直接输出 0 0。毕竟分母不可以是0.

if (0 == count)printf("0 0\n");
else// 其它情况输出结果

三、坑点分析

(一)、到底有多坑

看看这WA的一塌糊涂,狼狈的一匹。

(二)、测试点0,2

由于我这两个点每次都过,所以目前不知道坑点是啥,估计没有。

(三)、测试点1

这个,额,很奇妙。
就是如果有多个借书记录数据的话,以最后一个借书的数据为准。 如果有多个还书数据的话,以第一个还书数据为准

(四)、测试点3

对,就是它,愣是让我想了几十分钟,不断测试,不断WA,最后终于借助其它的一些blog才知道结果要四舍五入。
那么如何四舍五入呢,由于我上面的统计次数和时间都用的是整形,所以就用了先转为浮点数+0.5再强制转为int来完成的。

printf("%d %d\n", count, (int)((double)times/count+0.5));

四、代码实现

// 阅览室       20分
//FUCK WC,这TMD也太坑了吧,最后一个用例卡了半天
#include <stdio.h>// 每条数据记录该有的信息
typedef struct Book
{int wasBorrow;char operate;int hour;int min;
}Book;int main (void)
{int days, count, times, id;id = days = count = times = 0;// 存储每本书的借还情况Book records[1005], temp;scanf("%d", &days);while (days--){while (1){scanf("%d %c %d:%d", &id, &temp.operate, &temp.hour, &temp.min);if (0 == id)break;// 读取的操作如果是归还的话else if ('E' == temp.operate){if (records[id].wasBorrow == 1){count++;times += (temp.hour - records[id].hour) * 60 + temp.min - records[id].min;records[id].wasBorrow = 0;}}// 读取的操作如果是借阅的话else if ('S' == temp.operate){records[id] = temp;records[id].wasBorrow = 1;}}// 当天数据处理完之后输出结果if (0 == count)printf("0 0\n");elseprintf("%d %d\n", count, (int)((double)times/count+0.5));// 初始化一些该初始化的值count = times = 0;for (int i = 0; i < 1005; i++)records[i].wasBorrow = 0;}return 0;
}

五、作者相关

  • 作者简介

    • 作者:馗顺先生
    • 简介:一个热爱程序设计与电子技术的预备猿。后续也会不定期更新一些有趣的代码,以及一些有用的算法实现。大家可以关注以下哦。最后,若有不足,希望个位大佬们不吝赐教。
  • 联系方式

    • 邮箱:2727144006@qq.com
    • 博客地址: https://blog.csdn.net/qq_33519837?spm=1001.2100.3001.5113

PTA L1_043 阅览室(详解坑点)相关推荐

  1. 使用QQ互联完成网站的QQ第三方登录(详解+坑)

    前言:网站收尾工作,就只剩下第三方登录,去QQ互联注册,提交资料,审核了快一周,创建应用,一直创建不了,后来才发现是QQ互联的问题,耽误了两天又开始创建应用,终于弄好了,建议大家使用QQ第三方的,一定 ...

  2. L1-051 打折 (5 分) pta天梯赛 详解

    去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情.例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60.本题就请你写个程序替客户计算折扣价. 输入格式: ...

  3. ios navigation的返回按钮长按_Android Jetpack架构组件 — Navigation入坑详解 [转]

    前言 这是最近看见的觉得比较有意思的文,希望对大家的学习有帮助. Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构.应用 ...

  4. Android Studio 插件开发详解四:填坑

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78265540 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  5. html5录音怎么保存到本地,详解HTML5 录音遇到的坑

    本文恩主要介绍了详解HTML5 录音的踩坑之旅,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧,希望能帮助到大家. 说实话,一开始都没接触过 HTML5 的 Audio A ...

  6. mysql8 index255_详解关于MySQL 8.0走过的坑

    今天手贱更新了MySQL 8.0 第一个问题:Navicat连接不上数据库 安装的mysql为localhost:3306,配置一切默认,安装后打开Navicat 12 新建连接,直接报错 authe ...

  7. php jwt token 解析,JSON Web Token(JWT)入坑详解

    JSON Web Token(JWT)入坑详解 龙行    PHP    2019-6-17    1651    0评论 /** JWT生成类 **/ class Jwt { private $al ...

  8. python避坑_Django搭建项目实战与避坑细节详解

    Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...

  9. 详解vue静态资源打包中的坑与解决方案

    详解vue静态资源打包中的坑与解决方案 参考文章: (1)详解vue静态资源打包中的坑与解决方案 (2)https://www.cnblogs.com/goloving/p/8904545.html ...

最新文章

  1. 如何解决java乱码_java如何解决乱码
  2. FFMpeg中apiexample.c例子分析——解码分析
  3. ssm使用全注解实现增删改查案例——DeptServiceImpl
  4. Outlook怎么打印日历 Outlook日历打印教程
  5. SaaS市场没有免费午餐!未来只有两种企业可生存
  6. python是干什么的-python干嘛用
  7. 线性代数-求解地球法线
  8. Spark大数据计算框架知识总结
  9. 利用python处理pdf文本,帮我省下不少钱
  10. zuc算法代码详解_ZUC算法原理及实现过程
  11. ubuntu终端英文乱码问题
  12. php 考试系统 倒计时,php实现倒计时效果_PHP
  13. Android手机app的adb命令测试电量
  14. 文件隐藏服务器版本信息,隐藏Tengine的版本信息
  15. JAVA5 8 9章复习
  16. 适合520发朋友圈的文案句子精选
  17. Spring的sessionFactory配置详解
  18. DBeaver 7.1.4下载
  19. 一款查找并删除电脑中重复文件/图片/视频的软件
  20. 转---工作两年后感悟的《大话西游》

热门文章

  1. vscode更改安装路径 无法访问_装完系统必做的优化,更改用户文件和软件安装默认路径,你知道吗...
  2. 计算机二级题31套资料,计算机等级考试:二级VFP机试第31套
  3. html 浮动脱离文档流,CSS标准文档流与脱离文档流
  4. html将图片做成标签,HTML(图片标签)
  5. 【深度学习】U-Net 网络分割多分类医学图像解析
  6. 【Network Security!】用户组管理与批处理中(:goto)的用法
  7. python【蓝桥杯vip练习题库】ADV-17统计单词数
  8. python【蓝桥杯vip练习题库】ADV-187 勾股数
  9. python【力扣LeetCode算法题库】—两数之和
  10. android 上拉隐藏布局,Recycleview上拉隐藏与下拉显示