python 蓝桥杯填空题

本文探讨了字母数判断、进制转换(如26进制表示2022)、特殊日期的计算(包括闰年判断和日期范围统计),以及一些编程问题的解决方法,如大乘积的暴力搜索和利用集合优化的信号覆盖问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 填空题第一题较为简单,可以考虑使用更多的模拟的情况,就是使用这个
  • 日期问题是一个常考点:
    • 写出日期模版
    • 判断是否是闰年
    • 枚举年,月,日
    • 判断是否符合
  • 位运算需要掌握的东西:如何获取二进制

字母数

在这里插入图片描述

由于是填空题,那么寻找的话,就直接让每一个位置都是A,通过计算看看是不是结果大于2022即可

判断列名(进制问题)

在这里插入图片描述

  • 这道题目,我们可以往数字进制的方面考虑的话,就可能会简单许多
  • 可以理解为进制为26 的,然后给你2022,让你将2022用26 进制的符号来表示
  • 对于最低位就是2022对26 的取余
  • 对于次低位,就是 2022 对26 的取整然后再对26 取余
  • 由于经过计算,只有三位,那么最高位就是 2022 对26进行两次的取整
  • 对于字符的相对应的确认,我们可以先定义一个字符串,然后通过下标进行相对应的确认
import os
import sys

# 请在此输入您的代码

dic = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
a = 2022
print(dic[2022//(26*26)-1] + dic[(2022//26)%26-1] + dic[2022%26-1])


特殊日期

在这里插入图片描述

  • 这一题就只有枚举的暴力算法了,不过怎么进行枚举,如何避免超时就是我们要考虑的问题
  • 由于涉及年月日,三个不同的时期,有人就会考虑,能否使用一个三层循环?结果是肯定不行的。然后又有一个问题,就是如何对于不同的月份的 天数不一样的问题,难道要在循环里面添加多个i f 来判断吗?然后就是是否将闰年分开讨论?如何很好解决计算一个数字各个数位的数字之和?
  • 对于上述的问题:
    1.对于信息的存储:我们可以使用列表来存储,然后最后的一个查询的问题就可以使用字典(字典有一个和好处:就是当键不存在时,就会以你输入的键进行创建)
  • 对于重复使用并且可以单独的功能,我们就把该功能单独写成函数进行后续的一个调用
import os
import sys

# 请在此输入您的代码
def isLeap(x):  # 判断是否为闰年
    if (x % 4 == 0 and x % 100 != 0) or x % 400 == 0:
        return True
    return False

def numAdd(x):  # 计算年份个数位的数字和
    sums = 0
    while x:
        sums += x % 10
        x //= 10
    return sums


start, end = 1900, 9999
ans = 0
day = [1, -2, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1]  # 每个月天数和30天的差值
data = []
hstable = dict()  # key:月份1~12,value:每个月份月份数位和+日的数位和的区间,如1月份为(2, 32)
for j in range(1,32):  # 计算日数位和
    data.append(numAdd(j))
for i in range(1, 13):  # 初始化哈希表
    t = numAdd(i)  # 月数位和
    for j in range(day[i - 1] + 30):  # 遍历一个月的每一天将月数位和加上日数位和
        addt = t + data[j]
        if addt not in hstable:
            hstable[addt] = 1  
        else:
            hstable[addt] += 1  # 哈希表中对应的天数加一

for i in range(start, end + 1):  # 遍历每一年
    yearsum = numAdd(i)  # 计算年的数位和
    if yearsum in hstable:  # 若年的数位和在哈希表中存在则答案加上对应的天数
        ans += hstable[yearsum]
    if isLeap(i) and yearsum == 13:  # 闰年2月份多一天,位数和为13
        ans += 1

print(ans)

大乘积

在这里插入图片描述

  • 这就是一个简单的枚举的问题,由于问题的规模并不大,所以可以直接进行暴力
import os
import sys

a = [99,22,51,63,72,61,20,88,40,21,63,30,11,18,99,12,93,16,7,53,64,9,28,84,34,96,52,82,51,77]
count = 0
for i in range(30):

  for j in range(i+1,30):
    if a[i] * a[j] >=2022:
      count  = count +  1

print(count)

星期几

在这里插入图片描述

  • 这道题难度不高,但是容易忽略一个问题,就是在取余数的时候,当余数为0时要输出7
import os
import sys

# 请在此输入您的代码

w = int(input())
n = int(input())

a = (w+n) % 7

if a ==0:
  print(7)
else:
  print(a)

信号覆盖

重点,就是利用集合的性质,就是不能加入重复的元素

在这里插入图片描述

import os
import sys

# 请在此输入您的代码

W,H,n,R = map(int ,input().split())

store = set()

for i in range(n):
  x,y = map(int,input().split())
  for T in range(H+1):
    for q in range(W+1):
      if (q-x)**2 + (T-y)**2 <= R**2:
        store.add((T,q))

print(len(store))


  • 重点:利用圆的公式来判断点是否在范围内
  • 由于数据量不是很大,所以可以直接 暴力求解

河道清理

在这里插入图片描述
在这里插入图片描述

还是老样子,看到数据量很小,那么就可以使用暴力求解,对于重复信息的筛选,那么就使用集合 的 add() 函数来解决

import os
import sys

# 请在此输入您的代码

n,m = map(int,input().split())
t = int(input())
store = set()
for T in range(t):
  r1,c1,r2,c2 = map(int,input().split())

  for i in range(r1,r2+1):
    for j in range(c1,c2+1):
        store.add((i,j))
  
print(m*n-len(store))

日期统计

在这里插入图片描述

import os
import sys
from datetime import datetime,timedelta
# 请在此输入您的代码

data = '5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3'

realdata = data.split()

time1 = datetime(2023,1,1)
time2 = datetime(2023,12,31)

str1 = time1.strftime('%Y%m%d')

res = 0

while time1<=time2:
  strtime = time1.strftime('%Y%m%d')

  num = 0
  for i in range(len(realdata)):
    if num ==8:
      res+=1
      break
    if strtime[num]==realdata[i]:
      num+=1
  time1 = time1 + timedelta(days=1)

print(res)


图形

图形

在这里插入图片描述

思路分析:

  • 通过模拟,自己去尝试过程,你就会发现,最外边的4次是不能省略的,接着你就可以选择将横线全部先剪完,再接着将剩余的竖线剪完,或者先剪完竖线再去剪横线
# 20行22列
# 21 * 23 个线
# 都先减去2,也就是中间的线
# 19*21


ans1 = 4 + 19 + 20*21
ans2 = 4 + 21 + 22*19

print(min(ans1,ans2))
# 答案是443

### 蓝桥杯 Python 填空题 示例及解析 #### 示例一:质数判断填空题 以下是关于质数的一个典型填空题: ```python def is_prime(n): if n <= 1: return False for i in range(__, int(n ** __) + 1): if n % i == 0: return False return True ``` 此代码片段中的两个空白处应填写什么? **答案解析**: 第一个空白处应该填写 `2`,因为任何小于等于 1 的整数都不是质数,而质数的最小值是从 2 开始。第二个空白处应该是 `0.5` 或者直接写成平方根操作符 `sqrt` 来优化算法效率[^3]。 最终完整的函数如下所示: ```python def is_prime(n): if n <= 1: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True ``` --- #### 示例二:For 循环应用填空题 下面是一个简单的 For 循环练习题: ```python result = [] for i in range(__, __): result.append(i * i) print(result) ``` 如果希望输出的结果为 `[0, 1, 4, 9, 16]`,那么上述代码中的两处空白应该如何填充? **答案解析**: 为了实现目标列表 `[0, 1, 4, 9, 16]`,需要让循环变量 `i` 遍历范围从 `0` 到 `4`(包括两端),因此可以将这两处分别替换为 `0` 和 `5`[^2]。 修正后的代码如下: ```python result = [] for i in range(0, 5): result.append(i * i) print(result) ``` 运行该程序会得到预期结果 `[0, 1, 4, 9, 16]`。 --- #### 示例三:字符串处理填空题 以下是一道涉及字符串拼接的填空题: ```python s = "" for char in "hello": s += char + "__" print(s[:-__]) ``` 假设我们期望输出的内容是 `"h__e__l__l__o"`,则最后一行中缺失的部分是什么? **答案解析**: 由于每次迭代都会向字符串 `s` 中追加字符以及双下划线分隔符,在最后一个字符之后也会多出多余的分隔符。为了避免这种情况发生,可以通过切片移除最后两位字符。所以此处应当填入数值 `2`[^1]。 修改完成后的脚本如下: ```python s = "" for char in "hello": s += char + "__" print(s[:-2]) # 输出 h__e__l__l__o ``` --- ### 总结 以上展示了三种不同类型的蓝桥杯 Python 填空题实例及其对应的解决方案。通过这些例子可以看出,解决此类问题的关键在于理解基础语法结构、逻辑流程控制以及常见数据类型的操作方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值