蓝桥杯集锦07(python3)
试题 历届试题 回文日期
'''
思路:灵活应用datetime库函数
取出月,日的时候
'''
import datetime
stra = ''
strb = ''
a = 0
b = 0
str1 = input()
year = int(str1[0:4])
month = int(str1[4:6])
day = int(str1[6:8])
time = datetime.datetime(year=year, month=month, day=day)
while True:
time += datetime.timedelta(days=1)
d = str(time.day)
y = str(time.year)
m = str(time.month)
if len(d) == 1:
d = '0' + d
if len(m) == 1:
m = '0' + m
str2 = y + m + d
if str2 == str2[::-1] and a == 0:
stra = str2
a = 1
if str2[0:2] == str2[2:4] == str2[-1:-3:-1] == str2[-3:-5:-1]and b == 0:
strb = str2
b = 1
if a == 1 and b == 1:
print(stra)
print(strb)
break
试题 历届试题 子串分值和
str1 = input()
count = 0
dic = {}
for i in range(len(str1)):
for j in range(i,len(str1)+1):
for s in str1[i:j]:
if s not in dic.keys():
dic[s] = 1
count += len(dic)
dic.clear()
print(count)
超时了
试题 历届试题 日期问题
问题描述
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。
比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入格式
一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)
输出格式
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。
样例输入
02/03/04
样例输出
2002-03-04
2004-02-03
2004-03-02
a,b,c = map(int, input().split("/"))
res = []
def isRN(year):
if year % 4 == 0 and year % 100 != 0:
return True
elif year % 400 == 0:
return True
else:
return False
def solution(x, y, z): # 默认年月日
if x >= 0 and x <= 59:
x += 2000
elif x >= 60 and x <= 99:
x += 1900
if y <= 0 or y > 12:
return False
if z <= 0 or z > 31:
return False
if isRN(x) and y == 2 and z > 29:
return False
if isRN(x) == False and y == 2 and z > 28:
return False
if (y == 4 or y == 6 or y == 9 or y == 11) and z > 30:
return False
else:
if y < 10:
y = str(0) + str(y)
if z < 10:
z = str(0) + str(z)
res.append(str(x) + "-" + str(y) + '-' + str(z))
solution(a,b,c)
solution(c,a,b)
solution(c,b,a)
for i in sorted(list(set(res))):
print(i)
试题 历届试题 回文数字
问题描述
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
输入格式
一个正整数 n (10<n<100), 表示要求满足的数位和。
输出格式
若干行,每行包含一个满足要求的5位或6位整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1
样例输入
44
样例输出
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
样例输入
60
样例输出
-1
num = int(input())
hui = ''
hui = ''
lst = []
temp = []
temp1 = []
for i in range(100,1000):
i = str(i)
hui = i + i[1] + i[0]
hui1 = i + i[2] + i[1] + i[0]
temp1 = list(hui1)
temp1 = list(map(int,temp1))
temp = list(hui)
temp = list(map(int,temp))
if sum(temp) == num:
lst.append(int(hui))
if sum(temp1) == num:
lst.append(int(hui1))
if len(lst)!=0:
lst.sort()
for i in lst:
print(i)
else:
print(-1)
试题 历届试题 Excel地址
问题描述
Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
…
当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
样例输入
26
样例输出
Z
样例输入
2054
样例输出
BZZ
笨笨有话说:
这有点像进制关系,又不完全是。好像末2位是以1当26,末3位是以1当26*26
歪歪有话说:
要是从字母序列转数字还好点,倒过来有点麻烦,不过计算机跑得快啊。
'''
思路:其实就是十进制和26进制之间的转换;对于能整除26的进行特殊处理
'''
num = int(input())
lst = [chr(65+i) for i in range(26)]
str1 = ''
while num != 0:
if num%26==0:
str1 = lst[25] + str1
num = num//26 -1
else:
str1 = lst[num%26-1] + str1
num //=26
print(str1)