• Python: 每日一题之特殊时间


    问题描述

    本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

    2022 年 2 月 22 日 22: 20 是一个很有意义的时间, 年份为 2022 , 由 3 个 2 和 1 个 0 组成, 如果将月和日写成 4 位, 为 0222 , 也是由 3 个 2 和 1 个 0 组 成, 如果将时间中的时和分写成 4 位, 还是由 3 个 2 和 1 个 0 组成。

    小张对这样的时间很感兴趣, 他还找到了其它类似的例子, 比如 111 年 10 月 11 日 01: 11,2202 年 2 月 22 日 22: 02等。

    请问, 总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成 4 位后由 3 个一种数字和 1 个另一种数字组成。注意 1111 年 11 月 11 日 11: 1111:11 不算,因为它里面没有两种数字。

    分析: 

    根据题意分析得:在相同的数字中我们只能取 1 和 2 ,不可能出现 0 月,0 时

           年      月       日        时  分
    范围0 --- 99991--12       0--310--23     0--59

    我们把数据分为三组,可见月份对于数据的约束性最强

    月日中可能出现的数据:0111,0222,3月至9月无,1011,11月1日、10日至19日、21日,1211,1222

    对于任意一种年份都是存在的,我们先不用管年,先判断月日、时分中出现 3 个1 或 2的情况,我们找到所有是月份日期及时间后,只需其中的三个一样的数字和一个不同的数字全排列,就字符串中所有字符的所有排列,最后的结果乘以 4 即可得到最终结果(乘以四是加上年的)

    1. def panduan(n):
    2. if n.count('1')==3 or n.count('2')==3:
    3. return True
    4. return False
    5. day=[] # 月 日
    6. for m in range(1,13):
    7. for d in range(1,31):
    8. s="%02d%02d" %(m,d) #格式化补 0
    9. s1=sorted(s)
    10. if panduan(s):
    11. day.append(s1)
    12. hour=[] # 时间:小时和分钟
    13. for h in range(0,24):
    14. for m in range(0,60):
    15. s="%02d%02d" %(h,m)
    16. s1=sorted(s)
    17. if panduan(s):
    18. hour.append(s1)
    19. sum = 0
    20. for j in day: #遍历月日
    21. for k in hour: #遍历时分
    22. if j==k:
    23. sum+=1
    24. print(sum*4)

    注意:

    1. 年 月 日 时 分 中只有两种数字
    2. 日期要合法
  • 相关阅读:
    数据挖掘(五) k-means
    Netty学习——实战篇5 Netty 心跳监测/WebSocket长连接编程 备份
    TDD、BDD、ATDD以及SBE的概念和区别
    VM虚拟机,啥是jvm?jvm和jre,jdk的关系是什么?jvm原理是什么?
    托尔斯泰:生活中只有两种不幸
    Java的函数式接口是什么?
    SpringBoot:CORS是什么?SpringBoot如何解决跨域问题?
    转载:session ip change too many 产生的原因
    Linux进程概念详解
    python二级题库(百分之九十原题) 刷题软件推荐 第三套
  • 原文地址:https://blog.csdn.net/qq_65144447/article/details/128071509