回文日期&&门牌制作

文章介绍了如何处理寻找下一个回文日期和ABABBABA型日期的问题。通过使用Python的datetime库来增加日期,直到找到满足条件的日期。对于回文数,采用了检查日期字符串是否与其反向字符串相等的方法。对于ABABBABA型日期,检查特定位置的数字是否相等。另外,还提到了一种简化计数字符的方法,即利用str.count()函数来计算字符2在门牌号字符串中出现的次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

题目描述

如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

输入描述

输入包含一个八位整数 �N,表示日期。

对于所有评测用例,10000101≤�≤8999123110000101≤N≤89991231,保证 �N 是一个合法日期的 8 位数表示。

输出描述

输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

 主要思路

首先,是ABABBABA型的数也是回文数。输入的情况有以下几种:1)该数为ABABBABA型的数,则下一个回文数为ABAB= ABAB+1,且BABA为合法日期;2)该数为回文数但不是ABABBABA型(ABCDDCBA),则下一个回文数为[ABCD+1,1+CDBA],当日期不合格的时,继续++;以此类推

后面发现这样很复杂,每个月份天数还不一样,就去看了别人的答案,发现他们都是用暴力遍历的,虽然很暴力,但是很简单。就从输入的数开始往后推,直到下一个回文数和ABABBABA的数。

 代码:

import os
import sys
import datetime #导入日期库
# 请在此输入您的代码
idate=input()
y=int(idate[:4])#取出输入的年月日
m=int(idate[4:6])
d=int(idate[6:])
dd=datetime.date(y,m,d)#将输入的表示日期的字符串转换成日期
flag=True #回文日期只输出一次
for n in range(9999999):
  dd=dd+datetime.timedelta(days=1)#日期不断增加1天
  sd=str(dd).replace('-','')#将日期中的-去掉
  
  if sd[:]==sd[::-1]:#判断日期是否是回文
    if flag:
      print(int(sd))#输出回文日期
      flag=False#下次不输出回文日期
    if sd[0]==sd[2]==sd[5]==sd[7] and sd[1]==sd[3]==sd[4]==sd[6]: #判断是否是ABABBABA类型
      print(int(sd))#输出
      break#结束循环

tips:

 datetime详解

import os
import sys
import datetime
# 请在此输入您的代码

sum_run = 0
day_1 = datetime.date(2000, 1, 1)
day_2 = datetime.date(2020, 10, 1)

while day_1 <= day_2:
  if day_1.weekday() == 0 or day_1.day == 1:  # 如果是星期一,返回0;如果是星期2,返回1,以此类推  day_1.day返回日期
    sum_run += 2
  else:
    sum_run += 1
  day_1 += datetime.timedelta(days = 1)  # 往后延长一天

print(sum_run)

 

题目:

题目描述

请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

主要思路:

第一个想到的还是字典,遍历1-2020所有的数字,将每个数字的出现次数记录为values。

后面看题解,发现str有.count('2')的方法,这样更简单。所需的空间也更小。 

代码:

import os
import sys

# 请在此输入您的代码
dict_num = {}
for j in range(1,2021):
  for i in str(j):
    if i not in dict_num.keys():
      dict_num[i] = 1
    else:
      dict_num[i] = dict_num[i] + 1
print(dict_num['2'])

#另一种方法
'''
a = 0 
for i in range(1,2021):
    a = a + str(i).count('2')
print(a)
'''

 tips:

对python一些基础的语法还不太熟悉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值