法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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论