2024年第十五届蓝桥杯省赛B组Python【 简洁易懂题解】

2024年第十五届蓝桥杯省赛B组Python题解

一、整体情况说明

2024年第十五届蓝桥杯省赛B组Python组考试共包含8道题目,分为结果填空题和程序设计题两类。

  • 考试时间:4小时
  • 编程环境:Python 3.x,禁止使用第三方库,仅可使用标准库
  • 题型分布:2道结果填空题,6道程序设计题

考试题目涵盖了进制转换、动态规划、模拟、图论、搜索等多个知识点,旨在考察选手的综合编程能力和算法思维。

二、题型分布与分值概览

题号题目名称类型分值涉及知识点
A穿越时空之门结果填空题5进制转换
B数字串个数结果填空题5动态规划
C连连看程序设计题10模拟、哈希
D神奇闹钟程序设计题10模拟、时间处理
E蓝桥村的真相程序设计题15模拟、逻辑推理
F魔法巡游程序设计题15图论、广度优先搜索
G缴纳过路费程序设计题20图论、最短路径算法
H纯职业小组程序设计题20图论、拓扑排序([AcWing][1], [博客园][2], [知乎专栏][3], [Dotcpp][4], [力扣 LeetCode][5], [北京语言大学信息科学与技术系][6])

三、各题题解与代码实现

题目A:穿越时空之门

题目描述:从1到2024中,找出那些数字,其二进制表示的数位和等于其四进制表示的数位和的数字个数。

解题思路:遍历1到2024的每个数字,分别计算其二进制和四进制表示的数位和,若两者相等,则计数加一。

Python代码实现

def digit_sum(n, base):"""计算数字n在指定进制下的数位和"""total = 0while n > 0:total += n % basen //= basereturn totaldef count_equal_sums(limit):"""统计在1到limit中,二进制和四进制数位和相等的数字个数"""count = 0for i in range(1, limit + 1):if digit_sum(i, 2) == digit_sum(i, 4):count += 1return countif __name__ == "__main__":result = count_equal_sums(2024)print(result)  # 输出结果

结果:63


题目B:数字串个数

题目描述:构造一个长度为10000的数字字符串,要求不含数字0,且必须包含数字3和7,求满足条件的字符串数量,对10^9+7取模。

解题思路:使用动态规划,定义状态dp[i][j][k]表示长度为i的字符串中是否包含数字3(j)和数字7(k)的方案数。

Python代码实现

def count_strings(length):"""统计满足条件的数字字符串数量"""MOD = 10**9 + 7dp = [[[0]*2 for _ in range(2)] for _ in range(length+1)]dp[0][0][0] = 1  # 初始状态for i in range(1, length + 1):for has3 in range(2):for has7 in range(2):for digit in range(1, 10):  # 数字1到9new_has3 = has3 or (digit == 3)new_has7 = has7 or (digit == 7)dp[i][new_has3][new_has7] = (dp[i][new_has3][new_has7] + dp[i-1][has3][has7]) % MODreturn dp[length][1][1]if __name__ == "__main__":result = count_strings(10000)print(result)  # 输出结果

结果:157509472


题目C:连连看

题目描述:在一个n×m的矩阵中,统计满足条件的格子对数目。条件是:两个格子中的数字相等,且它们的位置满足|a−c|=|b−d|>0。

解题思路:利用哈希表记录对角线上的数字出现次数,分别处理主对角线和副对角线。对于每条对角线,统计相同数字出现的次数,使用组合数公式计算满足条件的格子对数目。

Python代码实现

from collections import defaultdictdef count_pairs(matrix):"""统计满足条件的格子对数目"""n = len(matrix)m = len(matrix[0])diag1 = defaultdict(lambda: defaultdict(int))diag2 = defaultdict(lambda: defaultdict(int))for i in range(n):for j in range(m):val = matrix[i][j]diag1[i - j][val] += 1diag2[i + j][val] += 1def count(diag):total = 0for line in diag.values():for count in line.values():if count > 1:total += count * (count - 1) // 2return totalreturn count(diag1) + count(diag2)if __name__ == "__main__":n, m = map(int, input().split())matrix = [list(map(int, input().split())) for _ in range(n)]result = count_pairs(matrix)print(result)  # 输出结果

题目D:神奇闹钟

题目描述:给定一个时间字符串,要求将其调整为一个回文时间,且调整后的时间不小于原时间,求最小的调整次数。

解题思路:从原时间开始,每次增加一分钟,直到时间字符串变为回文。

Python代码实现

def is_palindrome(time_str):"""判断时间字符串是否为回文"""return time_str == time_str[::-1]def next_minute(h, m):"""获取下一分钟的时间"""m += 1if m == 60:m = 0h += 1if h == 24:h = 0return h, mdef format_time(h, m):"""格式化时间为字符串"""return f"{h:02d}{m:02d}"def min_adjustments(h, m):"""计算最小的调整次数"""count = 0while True:time_str = format_time(h, m)if is_palindrome(time_str):return counth, m = next_minute(h, m)count += 1if __name__ == "__main__":time_input = input().strip()h, m = map(int, time_input.split(":"))result = min_adjustments(h, m)print(result)  # 输出结果

题目E:蓝桥村的真相

题目描述:在蓝桥村中,n名村民围坐在圆桌旁,每人发表一个声明,称他身后的两人中有一个说真话,一个说假话。求所有可能的真假组合中,说谎者的总数。([CSDN 博客][7])

解题思路:枚举所有可能的真假组合,验证每个组合是否满足所有人的声明,统计说谎者的数量。

Python代码实现

def total_liars(n):"""计算所有可能的真假组合中,说谎者的总数"""from itertools import producttotal = 0for combo in product([0, 1], repeat=n):  # 0表示真话,1表示假话valid = Trueliars = 0for i in range(n):next1 = (i + 1) % nnext2 = (i + 2) % nif combo[i] == 0:# 说真话,后两人中一个真一个假if combo[next1] == combo[next2]:valid = Falsebreakelse:# 说假话,后两人中不是一个真
::contentReference[oaicite:103]{index=103}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言--语法基础4--基本数据类型--类型转换

Go 是一种强类型的语言,所以如果在赋值的时候两边类型不一致会报错。一个类型的值可以被转换成另一种类型的值。由于 Go 语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明。 强制类型转换语法 使用 type (a) 这种形式来进行强制类型转换&am…

nginx 代理时怎么更改 Remote Address 请求头

今天工作中遇到用 localhost 访问网站能访问后台 api,但是用本机IP地址后就拒绝访问,我怀疑是后台获取 Remote Address 然后设置白名单了只能 localhost 访问。 想用 nginx 更改 Remote Address server {listen 8058;server_name localhost;loca…

LeetCode刷题链表

文章目录 链表总结 常用技巧两数相加题解代码 两两交换链表中的节点题解代码 重排链表题解代码 合并k个升序链表题解代码 K个一组翻转链表题解代码 链表总结 常用技巧 画图 直观 形象 便于理解引入虚拟头节点,便于处理边界情况,方便我们对链表进行…

ESP32S3 多固件烧录方法、合并多个固件为单一固件方法

ESP32S3 多固件烧录方法、合并多个固件为单一固件方法 文章目录 ESP32S3 多固件烧录方法、合并多个固件为单一固件方法前言1、前期准备工作2、多固件烧录方法3、单固件烧录方法总结 前言 使用正点原子的ESP32S3 BOX开发板独立烧录编译生成的xxx.bin固件无法正常运行起来&#…

Webug4.0靶场通关笔记10- 第14关链接注入

目录 第14关 链接注入 1.打开靶场 2.源码分析 3.渗透实战 (1)方法1:跳转外部网页 (2)方法2:获取cookie 4.漏洞防御 本文通过《webug靶场第14关 链接注入》来进行渗透实战。 第14关 链接注入 链接注…

SpringBoot的汽车商城后台管理系统源码开发实现

概述 汽车商城后台管理系统专为汽车4S店和经销商设计,提供全面的汽车管理系统解决方案。 主要内容 1. 核心功能模块 系统提供以下主要功能: ​​销售管理​​:记录销售信息,跟踪交易进度​​客户管理​​:维护客户…

VBA代码解决方案第二十四讲:EXCEL中,如何删除重复数据行

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

日本IT行业|salesforce开发语言占据的地位

在日本的IT行业中,Salesforce 开发语言处于一个较为专业但稳步增长的细分领域,并不是主流开发语言(如 Java、Python、PHP),但其在某些行业和场景中地位越来越重要。 本篇以下是详细分析: Salesforce开发语言…

前端开发,文件在镜像服务器上不存在问题:Downloading binary from...Cannot download...

问题与处理策略 问题描述 在 Vue 项目中,执行 npm i 下载依赖时,报如下错误 Downloading binary from https://npm.taobao.org/mirrors/node-sass//v4.14.1/win32-x64-72_binding.node Cannot download "https://npm.taobao.org/mirrors/node-sa…

基于Vue2 + Element 实现任务列表管理功能的详细教程

前言:本文介绍的是如何从0开始搭建Vue2项目到1实现对任务添加、删除和筛选的功能,🔗 相关链接Vue 入门(安装与应用超详细教程) ❤ 【作者主页—📚阅读更多优质文章、获取更多优质源码】 目录 一 . 项目搭建 1.1 安装node.js 1.…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.4 数据库与表的基本操作(DDL/DML语句)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 1.4 数据库与表的基本操作(DDL/DML语句)1.4.1 数据库生命周期管理(DDL核心)1.4.1.1 创建数据库(CREATE DATABASE&…

Fabrice Bellard(个人网站:‌bellard.org‌)介绍

Fabrice Bellard 是法国人,国际著名程序员。1972年生于法国Grenoble,大学就读于巴黎高等综合理工学院,后在国立巴黎高等电信学院攻读。 Fabrice Bellard(个人网站:‌bellard.org‌)是计算机领域最具影响力…

USB布局布线

1USB简介 USB是通用串行总线的英文缩写,是连接外部装置的一个串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通迅产品,并扩展到摄影器材,数字电视(机顶盒&#xff0…

【数据结构】线性表--链表

【数据结构】线性表--链表 一.前情回顾二.链表的概念三.链表的实现1.链表结点的结构:2.申请新结点函数:3.尾插函数:4.头插函数:5.尾删函数:6.头删函数:7.在指定结点之前插入:8.在指定结点之后插…

Mybatis-plus代码生成器的创建使用与详细解释

Mybatis-plus代码生成器的创建使用与详细解释 一、代码生成器概述 1. 定义(什么是代码生成器) 在软件开发过程中,存在大量重复性的代码编写工作,例如实体类、Mapper 接口、Service 接口及实现类等。代码生成器就是为了解决这类问题而诞生的工具。MyBa…

drawDB:打造高效数据库设计流程

drawDB:打造高效数据库设计流程 drawDB 简介资源链接 核心功能详解1. 直观的实体关系图设计2. SQL 脚本生成3. SQL 导入功能4. 本地化存储与分享功能5. 自定义主题与外观 安装和使用教程本地开发环境搭建构建生产版本Docker 部署基本使用方法 应用场景和实际价值适用…

基于 ESP32 和 GC9D01 0.71寸TFT屏幕的逼真眼睛与写轮眼动态显示

近期,我利用 ESP32 和 GC9D01 0.71’TFT 进行了一次有趣的显示项目开发,成功实现了在该小尺寸屏幕上绘制逼真眼睛和写轮眼的效果。 硬件准备 主控板 :ESP32,具备强大的处理能力和丰富的接口资源,能够高效地处理图像数…

LeetCode58_最后一个单词的长度

LeetCode58_最后一个单词的长度 标签:#字符串Ⅰ. 题目Ⅱ. 示例 0. 个人方法 标签:#字符串 Ⅰ. 题目 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、…

论文阅读:MAXIM Multi-Axis MLP for Image Processing

这是 2022 CVPR 上的一篇文章,介绍了用 MLP 做 low-level 图像处理的工作 Abstract 近年来,Transformer 和多层感知机(MLP)模型的发展为计算机视觉任务提供了新的网络架构设计。尽管这些模型在图像识别等许多视觉任务中已被证明…

PostgreSQL初试

文章目录 1 PostgreSQL 简介2 PostgreSQL 与 MySQL 的区别3 PostgreSQL 的安装1_Linux部署2_容器化部署 4 PostgreSQL的配置1_远程连接配置2_配置数据库的日志3_设置数据库密码 5 PostgreSQL 基本操作1_用户操作2_权限操作3_创建一个自己的用户4_差异补充 6 安装图形化界面1_使…