编程题:生成最大的24小时制时间

题目:

给定含有6个元素的数组如[0,2,3,0,5,6],生成24小时制最大时间如23:56:00
输入示例:

[1,2,3,4,5,6]

输出示例:

23:56:41

规定:

①输入是6个取值为0~9范围内的元素的list,可以不用做空值检查。

②输出是HH:MM:SS格式的字符串。

③如果无法组成有效的24小时制时间,输出InvalidList,如输入是[8,2,3,6,5,6]时输出则为InvalidList

解题思路

思路:以时分秒分为三组(每组两位如HH/MM/SS),依次判断剩余元素构成的list在限制值下能组成的最大值。

import sys
in_list = list(map(int,input()[1:-1].split(',')))
out_str = ''
def gen_time(in_list):
    cnt = 3#遍历3次,时分秒
    while(cnt!=0):
        #先判断极端值情况24:00:00
        if in_list.count(2)==1 and in_list.count(4)==1 and in_list.count(0)==4:
            return '24:00:00' 
        if cnt==3:#时
            out_str_Hour = getMaxTime(in_list,23)
            if out_str_Hour == 'InvalidList':
                return 'InvalidList'
        elif cnt==2:
            in_list.remove(int(out_str_Hour[0]))#移除已使用元素
            in_list.remove(int(out_str_Hour[1]))
            out_str_Min = getMaxTime(in_list,59)
            if out_str_Min == 'InvalidList':
                return 'InvalidList'
        elif cnt==1:
            in_list.remove(int(out_str_Min[0]))#移除已使用元素
            in_list.remove(int(out_str_Min[1]))
            out_str_Sec = getMaxTime(in_list,59)
            if out_str_Sec == 'InvalidList':
                return 'InvalidList'
        cnt-=1
    out_str = out_str_Hour+':'+out_str_Min+':'+out_str_Sec
    return out_str

def getMaxTime(in_list, limit_value):
    gen_list = []
    for i in in_list:
        j_list = in_list.copy()
        j_list.remove(i)#此处可以用itertools.permutations生成
        for j in j_list:
            gen_value = str(i)+str(j)
            gen_list.append(gen_value)
    gen_list = sorted(gen_list)
    for i in range(len(gen_list)):
        if gen_list[i]>str(limit_value):
            if i !=0:
                gen_str = gen_list[i-1]
                return gen_str
            else:
                return 'InvalidList'
        else:
            gen_str = gen_list[i]
    return gen_str

print(gen_time(in_list))

输入输出:
输入输出1
输入输出2
输入输出3

发布了24 篇原创文章 · 获赞 26 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/TracelessLe/article/details/105421316