酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下s键,程序开始计时;当读者还书时,管理员输入书号并按下e键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。 注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有s没有e,或者只有e没有s的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。 输入格式: 输入在第一行给出一个正整数n(≤10),随后给出n天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为: 书号([1, 1000]内的整数) 键值(s或e) 发生时间(hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数) 每一天的纪录保证按时间递增的顺序给出。 输出格式: 对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。 输入样例: 3 1 s 08:10 2 s 08:35 1 e 10:00 2 e 1

```python import datetime def calculate_borrow_info(records): # 存储每本书的借阅时间 book_times = {} # 有效借阅次数 valid_borrow_times = 0 # 总阅读时间(分钟) total_read_time = 0 for record in records: book_id, key, time_str = record time = datetime.datetime.strptime(time_str, "%H:%M") if key =='s': if book_id not in book_times: book_times[book_id] = time elif key == 'e': if book_id in book_times: start_time = book_times.pop(book_id) read_time = (time - start_time).total_seconds() / 60 total_read_time += read_time valid_borrow_times += 1 # 计算平均阅读时间 average_read_time = int(total_read_time / valid_borrow_times) if valid_borrow_times > 0 else 0 return valid_borrow_times, average_read_time n = int(input()) for _ in range(n): records = [] while True: line = input().split() if line[0] == '0': break records.append((int(line[0]), line[1], line[2])) borrow_times, average_time = calculate_borrow_info(records) print(f"{borrow_times} {average_time}") ``` 额外需要注意的逻辑点: 1. 对于时间的处理要准确,确保能正确计算阅读时长。 2. 处理无效纪录时要确保不影响有效借阅的统计。 3. 注意边界情况,比如第一天的开始时间和最后一天的结束时间。 [2024-11-30 10:47:03 | AI写代码神器 | 395点数解答]

相关提问