蓝桥杯刷题005——特殊时间

文章讲述了如何找出年月日时分都是3个相同数字和1个不同数字组成的时间,并提供了两种解决方法:手动计算和编程实现。通过分析月份和时间的可能组合,计算得出满足条件的总情况数,并考虑了年份的四种排列。最后提到了字符串格式化的相关知识。
摘要由CSDN通过智能技术生成

特殊时间

【问题描述】

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

        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: 11 不算,因为它里面没有两种数字。

【问题分析】

  •  约束条件最大:月份日期
  • 没有约束:年份
  • 数据中要特别注意的是日月组合,因为一个月有几天取决于月份。

每个月可能的日子:

  • 01月:11
  • 02月:22
  • 03-09月:无
  • 10月:11
  • 11月:01,10,12 -19,21
  • 12月:11,22

发现3个一种数字只能是1或2。 

        年份是没有限制的四位数,题目要求四个数里三个数一样,只要确定月日和时分的情况数,那在此情况数上×  × C_{4}^{3}即是所有可能的情况数。(例如01月11日01时11分的年份可能是0111,1011,1101,1110四个)

【题解】 

法一:手算 

由于一年里的情况数较少,可以通过手算求解。按照上面的分析,先计算月日时分数,1月2月十月都是4种,11月33种,12月8种,总共是53种,再×× C_{4}^{3}=212种。

法二:编码

def check(n):               # 检查3个一种数字是否是1或2
    if n.count('1')==3 or n.count('2')==3:
        return True
    return False
day=[]                      # 用来存3个一种数字是1或2的日子
for m in range(1,13):
    for d in range(1,31):
        s="%02d%02d"%(m,d)  # 字符串格式:不满两个字符的前面补0;等价于:f"{m:0>2d}{d:0>2d}"
        # 上面可以改成s = "{:0>2}{:0>2}".format(m,d)
        s1=sorted(s)        # 排序
        if check(s):
            day.append(s1)
hour=[]                     # 用来存一天的所有分钟
for h in range(0,24):
    for m in range(0,60):
        s="%02d%02d"%(h,m)  # 字符串格式:不满两个字符的前面补0
        s1=sorted(s)        # 排序:月日和时分都排序,这样就方便作比较
        if check(s):
            hour.append(s1)
cnt= 0                      # 统计满足题意的天数

# 年份没有限制,满足月日和时分的年份也能满足,所以不需要遍历年份。
for j in day:      # 遍历月日
    for k in hour: # 遍历时分
        if j==k:
            cnt+=1
print(cnt*4)    # 满足每组月日时分的年份有四个排列     212

 【拓展知识】

字符串格式化 

  • %C        格式化字符及其ASCII码
  • %s        格式化字符串
  • %d        格式化整数
  • %u        格式化无符号整型
  • %o        格式化无符号八进制数
  • %X        格式化无符号十六进制数
  • %f        格式化浮点数,可指定小数点后的精度
  • %e        用科学计数法格式化浮点数
  • %E        作用同%e,用科学计数法格式化浮点数

【收获】 

  • 若只需要比较两个字符串的字符是否相同(不要求顺序相同 ),做法:对字符串排序,然后用“==”判断。
  •  字符串格式化输出
  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小叶pyか

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值