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.pswp.cn/news/904162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904162.shtml
英文地址,請注明出處:http://en.pswp.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_使…