蓝桥杯集锦07(python3)

蓝桥杯集锦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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南岸青栀*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值