蓝桥杯训练10道真题————Python

目录

    • 一、纪念日
      • 解题思路
      • Code
      • Answer
    • 二、单词排列
      • 解题思路
      • Code
      • Answer
    • 三、括号排序
      • 解题思路
      • Code
      • Answer
    • 四、单词加密
      • 解题思路
      • Code
      • Answer
    • 五、分数
      • 解题思路
      • Code
      • Answer
    • 六、图片旋转
      • 解题思路
      • Code
      • Answer
    • 七、熊怪吃核桃
      • 解题思路
      • Code
      • Answer
    • 八、三角形面积
      • 解题思路
      • Code
      • Answer
    • 九、加法变乘法
      • 解题思路
      • Code
      • Answer
    • 十、饮料换购
      • 解题思路
      • Code
      • Answer

一、纪念日

蓝桥杯训练10道真题————Python_第1张图片

解题思路

  • 直接用Python的datetime模块就可以很简单的解决这个问题。

Code

# 纪念日
import datetime

x = datetime.datetime(1921, 7, 23, 12, 0, 0)
y = datetime.datetime(2020, 7, 1, 12, 0, 0)
print(36138 * 24 * 60)

Answer

蓝桥杯训练10道真题————Python_第2张图片

二、单词排列

将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。
  请问,总共能排列如多少个不同的单词。

解题思路

  • 直接暴力解就完事了。

Code

# 字母排列
import itertools


s = list("LANQIAO")
print(len(set(itertools.permutations(s))))

Answer

蓝桥杯训练10道真题————Python_第3张图片

三、括号排序

由1对括号,可以组成一种合法括号序列:()。
  由2对括号,可以组成两种合法括号序列:()()、(())。
  由4对括号组成的合法括号序列一共有多少种?

解题思路

  • 直接暴力解就完事了。

Code


# 括号排序
import itertools


def check(ls):
    if ls[0] == ')':
        return False
    stack = []
    for i in ls:
        if i == '(':
            stack.append(i)
        elif i == ')':
            if len(stack) == 0 or stack.pop() != '(':
                return False
    return True

ans = set()
ls = list(itertools.permutations(['(', ')', '(', ')', '(', ')', '(', ')']))
for i in ls:
    if check(i):
        ans.add(i)
print(len(ans))

Answer

蓝桥杯训练10道真题————Python_第4张图片

四、单词加密

给定一个单词,请使用凯撒密码将这个单词加密。
  凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,…,w变为z,x变为a,y变为b,z变为c。
  例如,lanqiao会变成odqtldr。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出一行,表示加密后的密文。
样例输入
anqiao
样例输出
odqtldr

解题思路

  • 先把字母的ASC值获取出来,然后加上3再重新输出。

Code

# 字母加密
letter = input()
arr = []
new_arr = []
for i in letter:
    arr.append(i)
for j in arr:
    value = ord(j) + 3
    new_arr.append(chr(value))
ans = ''.join(new_arr)
print(ans)

Answer

蓝桥杯训练10道真题————Python_第5张图片

五、分数

1/1 + 1/2 + 1/4 + 1/8 + 1/16 + …
每项是前一项的一半,如果一共有20项,
求这个和是多少,结果用分数表示出来。
类似:
3/2
当然,这只是加了前2项而已。分子分母要求互质。

注意:
需要提交的是已经约分过的分数,中间任何位置不能含有空格。
请不要填写任何多余的文字或符号。

解题思路

  • 暴力解就完事了。

Code

# 分数
from fractions import Fraction

res = []
for i in range(20):
    a = 1 / (2**i)
    res.append(a)
print(Fraction(sum(res)))

Answer

蓝桥杯训练10道真题————Python_第6张图片

六、图片旋转

图片旋转是对图片最简单的处理方式之一,在本题中,需要对图片顺时针旋转 90 度。用一个 n×m 的二维数组来表示一个图片,例如给出一个 3×4 的图片的例子:

1 3 5 7

9 8 7 6

3 5 9 7

这个图片顺时针旋转 90 度后的图片如下:

3 9 1

5 8 3

9 7 5

7 6 7

给定初始图片,请计算旋转后的图片。
【输入格式】

输入的第一行包含两个整数 n 和 m,分别表示行数和列数。接下来 n 行,每行 m 个整数,表示给定的图片。图片中的每个元素(像 素)为一个值为 0 至 255 之间的整数(包含 0 和 255)。

【输出格式】

输出 m 行 n 列,表示旋转后的图片。

解题思路

  • 用数组来解决这道题。
  • 分析题目,这道题的本质就是让数组图形进行90°的翻转,通过两个for循环就可以解决。

Code

# 图片旋转
n, m = map(int, input().split())
ls = []
for i in range(n):  # 构建数组
    num = list(map(int, input().split()))
    ls.append(num)
new_ls = [[0] * n for i in range(m)]
for a in range(n):
    for b in range(m):
        new_ls[b][a] = ls[2-a][b]

for i in range(len(new_ls)):
    for j in new_ls[i]:
        print(j,end=' ')
    print('')

Answer

蓝桥杯训练10道真题————Python_第7张图片

七、熊怪吃核桃

蓝桥杯训练10道真题————Python_第8张图片

解题思路

  • 直接暴力解就完事了。

Code

# 熊怪吃核桃
num = 1543
ans = 0
while num != 1:
    if num % 2 != 0:
        ans += 1
        num = (num-1) // 2
    else:
        num /= 2
print(ans+1)  # 因为最后剩下了一个核桃,需要把它扔掉,所以结果需要加1

Answer

蓝桥杯训练10道真题————Python_第9张图片

八、三角形面积

蓝桥杯训练10道真题————Python_第10张图片

解题思路

  • 暴力解就完事了。

Code


# 三角形面积
print(8*8-4*6//2-8*2//2-8*4//2)

Answer

蓝桥杯训练10道真题————Python_第11张图片

九、加法变乘法

蓝桥杯训练10道真题————Python_第12张图片

解题思路

  • 通过读题可以发现只有两个乘号。
  • 所以我们直接暴力解就可以了。

Code

# 加法变乘法
ls = []
for i in range(50):
    for j in range(50):
        if 1225- 2*i - 2*j - 2 + i*(i+1) + j*(j+1) ==2015 and i < j:
            ls.append([i,i+1,j,j+1])
print(ls[1][0])

Answer

蓝桥杯训练10道真题————Python_第13张图片

十、饮料换购

蓝桥杯训练10道真题————Python_第14张图片

解题思路

  • 直接暴力解就可以了。

Code

# 饮料换购
n = int(input())
sum = n
while sum >= 3:
    n += sum // 3
    sum = sum // 3 + sum % 3
print(n)

Answer

蓝桥杯训练10道真题————Python_第15张图片

你可能感兴趣的:(蓝桥杯,python)