时间"/>
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 --- 9999 | 1--12 0--31 | 0--23 0--59 |
我们把数据分为三组,可见月份对于数据的约束性最强
月日中可能出现的数据:0111,0222,3月至9月无,1011,11月1日、10日至19日、21日,1211,1222
对于任意一种年份都是存在的,我们先不用管年,先判断月日、时分中出现 3 个1 或 2的情况,我们找到所有是月份日期及时间后,只需其中的三个一样的数字和一个不同的数字全排列,就字符串中所有字符的所有排列,最后的结果乘以 4 即可得到最终结果(乘以四是加上年的)
def panduan(n):if n.count('1')==3 or n.count('2')==3:return Truereturn False
day=[] # 月 日
for m in range(1,13):for d in range(1,31):s="%02d%02d" %(m,d) #格式化补 0s1=sorted(s)if panduan(s):day.append(s1)
hour=[] # 时间:小时和分钟
for h in range(0,24):for m in range(0,60):s="%02d%02d" %(h,m)s1=sorted(s)if panduan(s):hour.append(s1)
sum = 0
for j in day: #遍历月日for k in hour: #遍历时分if j==k:sum+=1
print(sum*4)
注意:
- 年 月 日 时 分 中只有两种数字
- 日期要合法
更多推荐
Python: 每日一题之特殊时间
发布评论