时钟
时钟
http://www.nowcoder.com/questionTerminal/72f3cc4658024d12bcc122c29b35394e
把时间当成字符串来处理,分析每一个位置字符串可能出现的情况。
每一个字符串的格式都是完全相同的,从左到右依次分析:
记字符串的初始位置为 0。
那么判断一个时间是否合法,需要考虑的位置只有第 0、1、3 和 6 位。
例如:case = ['1', '9', ':', '0', '0', ':', '2', '3']
先来看小时 (0 位置和 1 位置):
- 小时的第一位只能是 0,1 或 2
case[0] 只能取 0,1,2 (合法直接跳过);
- 在小时第一位为 0 或 1 时,小时的第 2 位可以为 [0..9]
case[0] 属于 [0..1] 时,case[1] 可以取 [0..9] (case[0] 和 case[1] 都不用更改);
- 在小时第一位为 2 时,小时的第二位只能取 0,1,2,3
case[0] == 2,case[1] 可以取 [0..3],如果此时 case[1] > 3,因为要求最小改动和字典序最小,那么只需要把 case[0] 的位置改成 0 就好了。例如 28
08;
- 当小时第一位大于 2 时,只要变成 0 就好了,因为在第二条中分析过,当 case[0] == 1 时,case[1] 可以取 [0..9]。
分钟和秒钟是一样的,只要左边(case[3] 和 case[6]) 大于 5,直接修改为 0 即可。例如:99 09、75
05。
按照这个思路写出代码如下:
def process(case): '''Modify time to valid value. case: list, ['1', '9', ':', '0', '0', ':', '2', '3'] ['2', '8', ':', '1', '9', ':', '9', '7'] ['3', '8', ':', '9', '9', ':', '9', '7'] ''' if case[0] == '2': if case[1] > '3': case[0] = '0' if case[0] > '2': case[0] = '0' if case[3] > '5': case[3] = '0' if case[6] > '5': case[6] = '0' if __name__ == '__main__': case_count = int(input()) for i in range(case_count): case = [x for x in input().strip()] process(case) print(''.join(case))