From 6892db4fa96566b4e087626f575ed77fa621bff1 Mon Sep 17 00:00:00 2001 From: Oliver Lew Date: Sat, 5 May 2018 16:29:12 +0800 Subject: [PATCH] add a1016 --- source/analysis/a1016.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/analysis/a1016.md b/source/analysis/a1016.md index e69de29..a637ad2 100644 --- a/source/analysis/a1016.md +++ b/source/analysis/a1016.md @@ -0,0 +1,18 @@ +大体思路: + +- 题目给了不同人的不同通话记录, 要求输出每个人的账单. 那么最好我们在读取了数据之后, 立即对数据进行排序. **首先对名称排序, 其次对时间排序**. 这样后面就好处理了. +- 具体处理数据, 对比每相邻的两个记录, 以确定是否是同一个人/是否是同一组通话记录 + - 如果两组记录姓名不同, 则为一个新的账单, 此时需要输出总结, 将相关变量归零 + - 如果**不是上述情况**, 并且两组记录分为为'on-line'和'off-line', 那么则找到一组通话记录. 此时需计算通话费用, 累计总费用以及输出此记录信息. + +数据结构: + +- `struct[N + 1]`: 结构体包括名称, 月, 日, 时, 分, 时间(归算为分钟)和通话状态. 数组要比数据多1是因为要用最后一个作为空白对照, 以减少特殊情况的处理 + +注意的点: + +- 计算费用 + - (在其他博客看到的方法)计算从0到开始/结束时间的费用, 两者相减. 我觉得这种方法是最简单的, 实现容易. + - 我的方法是从开始到结束, 对每小时内的情况进行处理, 照顾到不足一小时的情况, 具体实现见`calccharge`函数. +- 输出, 除了上面思路中谈到的何时输出什么, 还有一点应该注意 + - 对于每个人, 如果没有需要输出的记录, 那么就什么都不要输出, 所以只能在明确有合理通话记录时, 再输出账单开头的姓名和月份的信息