法1:回文常用法,126ms
最简单易懂,最常用,最高效
#对于所有评测用例,10000101 ≤ N ≤ 89991231,保证N 是一个合法日期的8位数表示。
n = int(input())
def fin1(n):
for a in range(1,10): #题目限制范围1-9
for b in range(0,4): #日01-->31可选0,1,2,3
for c in range(0,10): #0-->9
for d in range(0,2): #月01-->12可选0,1
if d==c==0 or a==b==0: #重要
continue
e = ''.join(list(map
(str,[a,b,c,d,d,c,b,a])))
if e[::-1]==e and n<int(e):
return int(e)
def fin2(n):
for a in range(1,10):
for b in range(0,4):
for c in range(0,10):
for d in range(0,2):
e = ''.join(list(map
(str,[a,b,c,d,d,c,b,a])))
if all([a==c,d==b,n<int(e)]):
return int(e)
print('%d\n%d'%(fin1(n),fin2(n)))
#法2:较难懂,不是常用回文法,但是高效,149ms
a=int(input())
b=a//10000
c=a%10000
k=0
days=[0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
str8=str(a)
for i in range(b,9300):
f=i//100
q=(f%10)*10+(f//10)
g=i%100
d=(g%10)*10+(g//10)
if(0<d<=12 and q<=days[d] ):
str1=str(i)
str2=str1[::-1]
str3=str1[:2]
str4=str1[2:4]
str5=str2[:2]
str6=str2[2:4]
str7=str1+str2
if(k==0 and str7!=str8):
print(str1+str2)
k+=1
if(str3==str4 and str5==str6 and str4==str5[::-1] and str7!=str8):
print(str3+str4+str5+str6)
break
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复