1. 阅览室借阅统计系统的核心需求分析
这个图书借阅统计系统需要处理几个关键功能点。首先,系统要能准确记录每本书的借出和归还时间。当管理员输入书号并按下'S'键时,表示借书操作开始;输入书号并按下'E'键时,表示还书操作完成。书号范围限定在1到1000之间的整数,0作为特殊书号表示当天工作结束。
系统需要特别处理几种异常情况。比如线路故障可能导致记录不完整,出现只有'S'没有'E',或者只有'E'没有'S'的情况。这类无效记录必须被自动忽略。此外,系统要保证同一本书在同一时间段内只能被一位读者借阅,这是通过书号唯一标识来实现的。
输入数据的格式也有严格要求。第一行给出天数N(N≤10),随后是N天的记录。每天的记录由若干次借阅操作组成,每个操作占一行,包含书号、键值(S/E)和发生时间(hh:mm格式)。所有记录都按时间顺序给出,这点很重要,因为后续的时间差计算都依赖这个前提。
输出要求相对简单:对每一天,输出当天的借书次数和平均阅读时间(以分钟为单位的整数)。这里的平均阅读时间需要四舍五入处理,这在代码实现时需要特别注意。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据结构设计与状态管理
要实现这个系统,核心在于设计合适的数据结构来跟踪每本书的借阅状态。这里使用一个1001×2的二维数组是明智的选择。数组的第一维索引代表书号(1-1000),第二维的两个元素分别用于存储借阅状态和借阅开始时间。
具体来说,arr[id][0]这个位置用来标记书号为id的书是否被借出:1表示已借出,0表示未借出。arr[id][1]则存储该书借出的具体时间,这里把小时和分钟统一转换为总分钟数,方便后续计算时间差。例如"08:10"转换为8×60+10=490分钟。
这种设计有几个优势:首先,通过书号直接索引,查询效率是O(1)的;其次,状态标记和时间存储放在一起,逻辑清晰;最后,二维数组的大小固定为1001×2,内存占用可控(约8KB)。
在处理借书操作('S')时,系统会检查该书是否已被借出。虽然题目保证同一本书不会同时被多人借阅,但严谨的实现还是应该检查arr[id][0]是否为0,然后再设置为1并记录开始时间。不过样例代码中省略了这个检查,因为题目已经给出了保证。
3. 借还书配对逻辑的实现细节
系统的核心逻辑在于正确处理'S'和'E'的配对关系。当遇到'S'时,无论该书之
