法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语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1195 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:566 |
1050题解(结构体数组与结构体指针的使用)浏览:1108 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:537 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:345 |
矩阵的对角线之和 (C语言代码)浏览:1356 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:540 |
小O的乘积 (C++代码)浏览:755 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:521 |
C二级辅导-分段函数 (C语言代码)浏览:757 |