蓝桥杯真题Python组

题目一:

 

 代码:

l1 = ['geng','xin','ren','gui','jia','yi','bing','ding','wu','ji',]
l2 = ['shen','you','xu','hai','zi','chou','yin','mao','chen','si','wu','wei']

n = int(input())
print(l1[n%10],l2[n%12],sep='')

题目二:

【问题描述】

2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

有人表示 20200202 是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202 即2021年12月2日。

也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”。

给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

【输入格式】

输入包含一个八位整数 N,表示日期。

【输出格式】

输出两行,每行1个八位数。
第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

 代码:

import datetime
n = input()
start = datetime.date(int(n[0:4]),int(n[4:6]),int(n[6:]))
delta = datetime.timedelta(days=1)

while 1:
    start+=delta
    if str(start.year)[::-1]==str(start.month).zfill(2)+str(start.day).zfill(2):
        print(str(start.year)+str(start.year)[::-1])
        break
        
start = datetime.date(int(n[0:4]),int(n[4:6]),int(n[6:]))
while 1:
    start+=delta
    if str(start.year)[0:2][::-1]==str(start.year)[2:4][::-1]==str(start.month).zfill(2)==str(start.day).zfill(2):
        print(str(start.year)[0:2]*2+str(start.year)[0:2][::-1]*2)
        break

题目三:

  在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。
  比如:248 * 15 = 3720
  把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得
  2 + 4 + 8 = 14 ==> 1 + 4 = 5;
  1 + 5 = 6
  5 * 6
  而结果逐位求和为 3
  5 * 6 的结果逐位求和与3符合,说明正确的可能性很大!!(不能排除错误)

  请你写一个计算机程序,对给定的字符串逐位求和:
  输入为一个由数字组成的串,表示n位数(n<1000);
  输出为一位数,表示反复逐位求和的结果。

 

 代码: 

def f(l):
    if len(str(sum(l))) == 1:
        return sum(l)
    else:
        return f([int(i) for i in str(sum(l))])
    
s = input()
l = [int(i) for i in s]
print(f(l))

题目四:

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。

【输入格式】

输入一行包含一个单词,单词只由小写英文字母组成。

【输出格式】

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

  代码:

from collections import Counter

words = [i for i in input()]

word_counts = Counter(words)
top = sorted(word_counts.most_common(len(words)), key=lambda tup: tup[1], reverse=True)


l = []
max = top[0][1]
for i in top:
    if i[1]==max:
        l.append(i)
    else:
        break
l = sorted(l)
print(l[0][0],l[0][1],sep='\n')

题目五:

 代码: 

n = int(input())

l = []
for i in range(n):
    l.append(list(map(int, input().split())))
    
for i in range(n-1):
    for j in range(i+1):
        if i==0:
            continue
        if j==0:
            l[i][j]+=l[i-1][j]
        elif j==i:
            l[i][j]+=l[i-1][j-1]
        else:
            l[i][j]+=max(l[i-1][j],l[i-1][j-1])
            
if n%2==0:
    l[i+1][n//2-1]+=max(l[i][n//2-2],l[i][n//2-1])
    l[i+1][n//2]+=max(l[i][n//2-1],l[i][n//2])
    print(max(l[i+1][n//2-1], l[i+1][n//2]))
else:
    l[i+1][n//2]+=max(l[i][n//2-1],l[i][n//2])
    print(l[i+1][n//2])

题目六:

 代码: 

import datetime

n = int(input())
start = datetime.datetime(1970, 1, 1, 0, 0, 0)
sep = datetime.timedelta(seconds=0.001)
end = start + sep*n
print("%s:%s:%s"%(str(end.hour).zfill(2), str(end.minute).zfill(2), str(end.second).zfill(2)))

题目七:

  X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...
  当排满一行时,从下一行相邻的楼往反方向排号。
  比如:当小区排号宽度为6时,开始情形如下:

  1 2 3 4 5 6
  12 11 10 9 8 7
  13 14 15 .....

  我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

  输入为3个整数w m n,空格分开,都在1到10000范围内
  w为排号宽度,m,n为待计算的楼号。
  要求输出一个整数,表示m n 两楼间最短移动距离

  例如:
  用户输入:
  6 8 2
  则,程序应该输出:
  4

  再例如:
  用户输入:
  4 7 20
  则,程序应该输出:
  5

 代码(解法一): 

w, m, n = map(int,input().split())
l = []
f = 1
i = 1
a,b,c,d=0,0,0,0
while 1:
    if f%2==1:
        x = [j+i-1 for j in range(1,w+1)]
        l.append(x)
        if min(m,n) in x:
            a=f
            b=x.index(min(m,n))
        if max(m,n) in x:
            c=f
            d=x.index(max(m,n))
            break
        i+=w
    else:
        x=[i+w-j for j in range(1,w+1)]
        l.append(x)
        if min(m,n) in x:
            a=f
            b=x.index(min(m,n))
        if max(m,n) in x:
            c=f
            d=x.index(max(m,n))
            break
        i+=w
    f+=1
print(abs(c-a)+abs(d-b))

代码(解法二):

w, m, n = map(int, input().split())
l = []

if max(m, n)%w == 0:
    line = max(m, n)//w
else:
    line = max(m, n)//w+1

for i in range(line):
    if i%2 == 0:
        l.append([i*w+j for j in range(1,w+1)])
    else:
        l.append([(i+1)*w-j for j in range(w)])

for i in range(line):
    if min(m, n) in l[i]:
        a = i
        b = l[i].index(min(m, n))

c = line-1
d = l[line-1].index(max(m, n))

print(abs(a-c)+abs(b-d))

题目八:

 代码: 

a = int(input())
b = 0
s = 0

while 1:
    con=a
    a=(b+con)//3
    b=(b+con)%3
    s+=con
    if a==0 and b//3==0:
        print(s)
        break

题目九:

 代码: 

import datetime
s = input()
s = s.split('/')
l=[]
begin = datetime.date(1960,1,1)
end = datetime.date(2059,12,31)
for i in ['19','20']:
    try:
        a = datetime.date(int(i+s[0]),int(s[1]),int(s[2]))
        if a>=begin and a<=end:
            l.append(a)
    except:
        pass
    try:
        a = datetime.date(int(i+s[2]),int(s[0]),int(s[1]))
        if a>=begin and a<=end:
            l.append(a)
    except:
        pass
    try:
        a = datetime.date(int(i+s[2]),int(s[1]),int(s[0]))
        if a>=begin and a<=end:
             l.append(a)
    except:
        pass
l=list(set(l))
l.sort()
for i in l:
    print(i)

题目十:

 代码: 

n = int(input())
arr = []
for i in range(n):
    arr.append(list(map(int,input().split())))
for i in range(n):
    for j in range(n):
        if i==0:
            if j==0:
                continue
            else:
                arr[i][j]+=arr[i][j-1]
        elif j==0:
            if i==0:
                continue
            else:
                arr[i][j]+=arr[i-1][j]
        else:
            arr[i][j]+=max(arr[i][j-1],arr[i-1][j])
print(arr[n-1][n-1])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值