PTA L1_043 阅览室(详解坑点)
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 阅览室(详解坑点)相关推荐
- 使用QQ互联完成网站的QQ第三方登录(详解+坑)
前言:网站收尾工作,就只剩下第三方登录,去QQ互联注册,提交资料,审核了快一周,创建应用,一直创建不了,后来才发现是QQ互联的问题,耽误了两天又开始创建应用,终于弄好了,建议大家使用QQ第三方的,一定 ...
- L1-051 打折 (5 分) pta天梯赛 详解
去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情.例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60.本题就请你写个程序替客户计算折扣价. 输入格式: ...
- ios navigation的返回按钮长按_Android Jetpack架构组件 — Navigation入坑详解 [转]
前言 这是最近看见的觉得比较有意思的文,希望对大家的学习有帮助. Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构.应用 ...
- Android Studio 插件开发详解四:填坑
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78265540 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- html5录音怎么保存到本地,详解HTML5 录音遇到的坑
本文恩主要介绍了详解HTML5 录音的踩坑之旅,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧,希望能帮助到大家. 说实话,一开始都没接触过 HTML5 的 Audio A ...
- mysql8 index255_详解关于MySQL 8.0走过的坑
今天手贱更新了MySQL 8.0 第一个问题:Navicat连接不上数据库 安装的mysql为localhost:3306,配置一切默认,安装后打开Navicat 12 新建连接,直接报错 authe ...
- php jwt token 解析,JSON Web Token(JWT)入坑详解
JSON Web Token(JWT)入坑详解 龙行 PHP 2019-6-17 1651 0评论 /** JWT生成类 **/ class Jwt { private $al ...
- python避坑_Django搭建项目实战与避坑细节详解
Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...
- 详解vue静态资源打包中的坑与解决方案
详解vue静态资源打包中的坑与解决方案 参考文章: (1)详解vue静态资源打包中的坑与解决方案 (2)https://www.cnblogs.com/goloving/p/8904545.html ...
最新文章
- 如何解决java乱码_java如何解决乱码
- FFMpeg中apiexample.c例子分析——解码分析
- ssm使用全注解实现增删改查案例——DeptServiceImpl
- Outlook怎么打印日历 Outlook日历打印教程
- SaaS市场没有免费午餐!未来只有两种企业可生存
- python是干什么的-python干嘛用
- 线性代数-求解地球法线
- Spark大数据计算框架知识总结
- 利用python处理pdf文本,帮我省下不少钱
- zuc算法代码详解_ZUC算法原理及实现过程
- ubuntu终端英文乱码问题
- php 考试系统 倒计时,php实现倒计时效果_PHP
- Android手机app的adb命令测试电量
- 文件隐藏服务器版本信息,隐藏Tengine的版本信息
- JAVA5 8 9章复习
- 适合520发朋友圈的文案句子精选
- Spring的sessionFactory配置详解
- DBeaver 7.1.4下载
- 一款查找并删除电脑中重复文件/图片/视频的软件
- 转---工作两年后感悟的《大话西游》
热门文章
- vscode更改安装路径 无法访问_装完系统必做的优化,更改用户文件和软件安装默认路径,你知道吗...
- 计算机二级题31套资料,计算机等级考试:二级VFP机试第31套
- html 浮动脱离文档流,CSS标准文档流与脱离文档流
- html将图片做成标签,HTML(图片标签)
- 【深度学习】U-Net 网络分割多分类医学图像解析
- 【Network Security!】用户组管理与批处理中(:goto)的用法
- python【蓝桥杯vip练习题库】ADV-17统计单词数
- python【蓝桥杯vip练习题库】ADV-187 勾股数
- python【力扣LeetCode算法题库】—两数之和
- android 上拉隐藏布局,Recycleview上拉隐藏与下拉显示