[特殊字符] 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字
🔍 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字
🚀 题目速览
题目难度:⭐⭐⭐(需掌握位运算与组合数学)
考察重点:二进制状态处理、位运算、乘法原理、枚举
P10984 [蓝桥杯 2023 国 Python A] 残缺的数字
题目描述
七段码显示器是一种常见的显示数字的电子元件,它有七个发光管组成:

上图依次展示了数字 0 ∼ 9 0\sim 9 0∼9 用七段码来显示的状态,其中灯管为黄色表示点亮,灰色表示熄灭。根据灯管的亮暗状态,我们可以用一个状态码(状态码是一个 7 7 7 位的二进制数字)来表示一个七段码,令灯管点亮时状态为 1 1 1,灯管熄灭时状态为 0 0 0,按照灯管 A B C D E F G \rm ABCDEFG ABCDEFG 的顺序标识一个七段码,则数字 0 ∼ 9 0 \sim 9 0∼9 的状态码为:
| 数字 | 状态码 | 数字 | 状态码 |
|---|---|---|---|
| 0 0 0 | 1111110 1111110 1111110 | 5 5 5 | 1011011 1011011 1011011 |
| 1 1 1 | 0110000 0110000 0110000 | 6 6 6 | 1011111 1011111 1011111 |
| 2 2 2 | 1101101 1101101 1101101 | 7 7 7 | 1110000 1110000 1110000 |
| 3 3 3 | 1111001 1111001 1111001 | 8 8 8 | 1111111 1111111 1111111 |
| 4 4 4 | 0110011 0110011 0110011 | 9 9 9 | 1111011 1111011 1111011 |
小蓝有一个喜爱的数字,长度为 18 18 18 位,每一位用一个七段码显示器来展示
(每位只能是 0 ∼ 9 0 \sim 9 0∼9,可以包含前导零),由于灯管故障,一些本该点亮的灯管
处于了熄灭状态。例如,对于一个长度为 2 2 2 的数字来说,当两个七段码对应的
状态码分别为: 1011111 1011111 1011111(高位)、 1110011 1110011 1110011(低位)时,原本的数字可能会是:
68 68 68、 69 69 69、 88 88 88、 89 89 89,有 4 种可能的值。
18 18 18 个七段码显示器对应的状态码分别为:
0000011 0000011 0000011, 1001011 1001011 1001011, 0000001 0000001 0000001, 0100001 0100001 0100001, 0101011 0101011 0101011, 0110110 0110110 0110110,
1111111 1111111 1111111, 0010110 0010110 0010110,
0101001 0101001 0101001, 0010110 0010110 0010110,
1011100 1011100 1011100, 0100110 0100110 0100110,
1010000 1010000 1010000, 0010011 0010011 0010011,
0001111 0001111 0001111, 0101101 0101101 0101101,
0110101 0110101 0110101, 1101010 1101010 1101010。
其中每个表示一个七段码对应的的状态码(按照数字的高位到低位给出)。请你
判断下小蓝喜爱的数字有多少种可能的值。
输入格式
无
输出格式
一行一个整数表示答案。
(题目意思就是说18个七段码有多少种有效组合,
有效的例子:
- 二进制解析:
- 对应七段码的灯管状态为:
GFEDCBA = 0000011 - 即只有 G段 和 F段 亮起 !
- 对应七段码的灯管状态为:
- 寻找有效数字:
- 检查数字0-9的原始亮灯状态是否包含G和F段亮起
- 数字1的原始状态码:0110000(GFEDCBA)
- G=0,F=0 → 不满足
- 数字7的原始状态码:1110000
- G=1,F=1 → 满足
- 结论:该状态码对应有效数字可能为7
然后把这些可能在这18位数中进行组合)
🔥 核心解法:位运算 + 组合乘法
🛠️ 实现思路
- 二进制状态编码
- 将每个七段码状态转换为整数(二进制处理)
- 预计算数字0-9的标准七段码二进制值
- 状态匹配检测
- 对每个输入状态码,检查其是否为某数字标准码的子集
- 统计每个位置的有效数字数量
- 组合乘法
- 所有位置的有效数字数量相乘得到最终结果
🛠️ C++代码实现
#include <iostream>
#include <vector>
#include <string>using namespace std;// 将7位二进制字符串转换为整数
int str_to_bits(const string& s) {int res = 0;for (char c : s) { // 遍历每个字符res = (res << 1) | // 左移腾出新位(c - '0'); // 转换字符为0/1}return res;
}int main() {// 数字0-9的标准七段码(字符串形式)const vector<string> digit_codes = {"1111110", "0110000", "1101101", "1111001","0110011", "1011011", "1011111", "1110000","1111111", "1111011"};// 预计算数字对应的二进制值int digit_values[10];for (int i = 0; i < 10; ++i) {digit_values[i] = str_to_bits(digit_codes[i]);}// 题目给定的18个状态码const vector<string> input_codes = {"0000011", "1001011", "0000001", "0100001","0101011", "0110110", "1111111", "0010110","0101001", "0010110", "1011100", "0100110","1010000", "0010011", "0001111", "0101101","0110101", "1101010"};// 转换输入状态码为整型vector<int> states;for (const auto& code : input_codes) {states.push_back(str_to_bits(code));}// 计算总可能性long long total = 1;for (int state : states) {int valid_count = 0;for (int i = 0; i < 10; ++i) { // 遍历所有数字// 关键判断:输入状态是数字状态的子集if ((digit_values[i] & state) == state) {++valid_count;}}total *= valid_count;}cout << total << endl; // 输出最终结果return 0;
}
📚 关键知识点解析
一、二进制状态处理
| 操作 | 代码实现 | 作用 |
|---|---|---|
| 字符串转二进制 | `(res << 1) | (c - ‘0’)` |
| 状态匹配检测 | (digit & input) == input | 验证输入状态是数字状态的子集 |
二、按位或运算符 |
作用:将两个数的二进制对应位进行逻辑或运算(任意一位为1则结果为1)
示例:
Cppint a = 5; // 00000101
int b = 3; // 00000011
int c = a | b; // 00000111(十进制7)
代码中的作用:
res = ... | (c - '0')将新位(0或1)拼接到结果末尾- 相当于二进制位的动态拼接
三、字符转换 c - '0'
作用:将字符 '0' 或 '1' 转换为整数 0 或 1
原理:
- 字符
'0'的ASCII码是48,'1'是49 '0' - '0' = 0,'1' - '0' = 1
🚨 易错点警示
错误1:位运算优先级错误
// 错误写法:缺少括号导致逻辑错误
if (digit & state == state) // 正确写法
if ((digit & state) == state)
错误2:二进制转换错误
// 错误:逆序处理导致位顺序错误
for (int i = s.size()-1; i >=0; --i) // 错误处理顺序// 正确:按字符串顺序处理
for (char c : s) // 从左到右处理
⚡ 性能分析
| 操作 | 时间复杂度 | 空间复杂度 | 说明 |
|---|---|---|---|
| 预处理数字状态 | O(10) | O(1) | 固定10个数字 |
| 处理输入状态 | O(18) | O(18) | 固定18个状态码 |
| 计算有效数 | O(18×10) | O(1) | 常数级运算 |
| 总复杂度 | O(1) | O(1) | 所有操作均为常数时间 |
🌟 举一反三
变种题1:动态七段码显示
若七段码显示模式可变(如部分段损坏不可用),需修改状态检测逻辑:
// 添加损坏段掩码
int broken_mask = 0b0010000; // 假设G段损坏
if ((digit & (state | broken_mask)) == state) {// 有效条件需排除损坏段
}
变种题2:多状态可能性查询
若需多次查询不同状态组合,可预先建立数字状态的特征矩阵:
vector<bitset<128>> feature(10); // 每个数字的状态特征
// 预处理所有可能状态
for (int i=0; i<10; ++i) {for (int s=0; s<128; ++s) {feature[i][s] = ((digit_values[i] & s) == s);}
}
答案验证:运行程序输出 254016000,与Python实现结果一致,验证算法正确性。本解法通过位运算优化,在保证可读性的同时达到最优性能,适合蓝桥杯竞赛场景。
相关文章:
[特殊字符] 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字
🔍 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字 🚀 题目速览 题目难度:⭐⭐⭐(需掌握位运算与组合数学) 考察重点:二进制状态处理、位运算、乘法原理、枚举 P10984 [蓝桥杯 2…...
线程控制与线程库
目录 解析tid 线程的地址空间布局 线程栈 我们来学习线程控制与线程库 解析tid #include<iostream> #include<string> #include<cstdio> #include<cstring> #include<unistd.h> #include<thread> using namespace std;int shared_val…...
P1182 数列分段 Section II
P1182 数列分段 Section II - 洛谷 题目描述 对于给定的一个长度为 N 的正整数数列 A1∼AN,现要将其分成 M(M≤N)段,并要求每段连续,且每段和的最大值最小。 关于最大值最小: 例如一数列 4 2 4 5 1…...
比手动备份快 Iperius全自动加密备份,NAS/云盘/磁带机全兼容
IperiusBackupFull是一款专为服务器和工作站设计的备份解决方案,它同时也是一款针对Windows 7/8/10/11/Server系统的简洁且可靠的备份软件。该软件支持增量备份、数据同步以及驱动器镜像,确保能够实现完全的系统恢复。在备份存储方面,Iperius…...
从概率到梯度:理解分类问题中交叉熵的优越性
分类问题一般使用交叉熵(Cross-Entropy)而不是平方损失(Square Loss)函数1. **概率解释**2. **梯度性质**3. **对错误的惩罚**4. **计算复杂度**5. **总结** 分类问题一般使用交叉熵(Cross-Entropy)而不是平…...
2025最新版Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明
官网 https://ubuntu.com/ 下载 点击菜单 Prodercts> Ubuntu OS>Ubuntu Server 点击下载 下载后会有个弹窗 安装 选择第一个 install Ubuntu Server 直接默认,选择English 【默认】 选择键盘布局【默认】 选择安装配置【默认】 配置网络 我这里选择…...
更新测试环境构建命令以解决构建失败问题
本段代码解决 更新测试环境构建命令以解决构建失败问题 //本项目是reactumi3antdesign 搭建的后台管理系统 "build:test": "cross-env UMI_ENVtest NODE_OPTIONS--openssl-legacy-provider umi build"**原因:**Node.js v17 的 OpenSSL 3.0 与旧…...
C 语言中, scanf 函数在哪些情况下会结束输入读取:
在 C 语言中, scanf 函数在以下几种情况下会结束输入读取: : 1. 遇到指定格式匹配失败: scanf 按照格式字符串要求读取输入。当输入数据格式与格式字符串不匹配时,就会结束读取。例如 scanf(“%d”, &num) 要求输…...
树莓派5-GPIO和40针引脚
1.树莓派5引脚图 2.GPIO 引脚作用 (1) 电压 板上有两个 5V 引脚和两个 3.3V 引脚,以及一些不可配置的接地引脚 (0V)。其余引脚均为通用 3.3V 引 脚,这意味着输出设置为 3.3V,输入可接 3.3V。 (2) 输出 指定为输出引脚的 GPIO 引脚可设置为…...
【数据库】sql错题详解
1. 执行子查询 SELECT 供应商号 FROM 订购单 WHERE 职工号 IN (E1, E3) GROUP BY 供应商号 HAVING COUNT(DISTINCT 职工号) 2筛选职工号为 E1 或 E3 的记录: 依据 WHERE 职工号 IN (E1, E3) 这个条件,从 订购单 表中把职工号为 E1 或者 E3 的记录筛选出…...
搭建主从DNS、nfs、nginx
任务需求: 客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容为:Very good, you have successfully set up the system. 各个主机能够实现时间同步,…...
C#重写treeView控件
1.先准备两张图片downdrop.png、downdrop_open.png放在项目Resources里 2.新建用户控件BaseTreeView控件 3.重写控件继承TreeView,记得删除AutoScaleMode这一行,否则会报错 public partial class BaseTreeView : TreeView {//这个属性貌似不起作用&…...
JS自动装箱(Auto-boxing)机制深度解析
📦 JS自动装箱(Auto-boxing)机制深度解析 自动装箱(Autoboxing) 是 JavaScript 的一项特性 🌟 核心概念速览 自动装箱 原始值临时变身对象 当对原始值调用方法或访问属性时,JS 引擎会自动将其转换为对应的包装对象&…...
ArcGIS 10.8.1之后发布栅格数据的MapServer 动态工作空间 替换数据源渲染问题
背景 经过测试,Server 10.8.1、11.0、11.1发布相关服务设置动态空间之后,前端都无法自动读取同名的clr色彩映射表文件进行渲染,服务都是由ArcGIS Pro进行发布。 原因 基于ArcMap发布的服务才支持,但是10.8.1之后不支持ArcMap发…...
Java集合框架深度剖析:从数据结构到实战应用
引言 Java集合框架是Java开发中的核心组件之一,其设计目标是提供高性能、高复用性的数据容器。无论是数据处理、缓存设计还是高并发场景,集合框架都扮演着关键角色。本文将从List、Map、Set三大核心接口出发,深入剖析其主流实现类࿰…...
【MySQL】监控MySQL
目录 使用状态变量监控MySQL 使用性能模式(Performance Schema)监控MySQL 1.性能模式 2.性能模式设置表 3.sys模式 使用状态变量监控MySQL 使用 show status 语句评估系统运行状况。 可以添加范围修饰符global或session来显示全局或本地状态信息。…...
涅槃上岸,入陕进军,复试全程流程开启!
复试决胜局,整装待发,上岸西电! 线下复试注意事项、全流程、录取后西安旅游提前告知! 过两天考研复试笔试、机试(如果有)、面试就要开始了,我们需要准备很多东西,学长从以下几个方面…...
msyql--基本操作之运维篇
检查 root 用户的权限 查看该用户针对这个数据库的权限 -- 如果在终端连接mysql时需要 mysql -u root -p -- 查看用户权限 SELECT user, host FROM mysql.user WHERE user root;可以看的出来root有他的访问权限,如过没有localhost或者% 说明没有访问权限 添加…...
鸿蒙开发:openCustomDialog关闭指定Dialog
前言 本文基于Api13 openCustomDialog弥补了CustomDialogController在使用上存在的诸多限制,实现了可以在任意位置上弹出,可以说是非常的方便;但是,在使用的时候遇到了一些小阻碍,比如一个页面中可能存在多个弹窗&…...
es6 fetch
对比XHR 🛠️ fetch 所有配置项 fetch(url, {// 核心配置 method: GET, // HTTP 方法: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONSheaders: { // 请求头(支持 Headers 对象或普通对象)Content-Type: applicati…...
Apache Tomcat RCE漏洞(CVE-2025-24813)
一,漏洞描述 该漏洞在于 Tomcat 在处理不完整PUT请求上传时,会使用了一个基于用户提供的文件名和路径生成的临时文件。 二,漏洞条件 1,默认 Servlet 启用了写权限(默认禁用) 2,启用了部分PUT…...
Apache HttpClient使用
一、Apache HttpClient 基础版 HttpClients 是 Apache HttpClient 库中的一个工具类,用于创建和管理 HTTP 客户端实例。Apache HttpClient 是一个强大的 Java HTTP 客户端库,用于发送 HTTP 请求并处理 HTTP 响应。HttpClients 提供了多种方法来创建和配…...
智能汽车图像及视频处理方案,支持视频星轨拍摄能力
美摄科技作为智能汽车图像及视频处理领域的先行者,正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案,一个集高效性、智能化、画质增强于一体的创新解决方案,旨在重塑智能汽车图像画质的新标准,并支持前…...
【微服务架构】本地负载均衡的实现(基于随机算法)
前言 负载均衡 概念:一种将网络流量或业务请求均匀分配到多个服务器或服务实例上的技术,旨在提高系统的可用性、性能和可伸缩性。作用: 提高性能:通过将请求分散到多个实例上,避免单个实例因请求过多而过载ÿ…...
C盘急救实录:从爆红到畅快
极速救援通道(懒人专享) 老规矩,先上王炸方案!”小番茄C盘清理器”直达链接:https://cclean-cdn.xkbrowser.com/cleanmaster/FanQieClean_13046_st.exe 这个神器有三绝: 智能扫描引擎:能识别23…...
从零开始理解基于深度学习的语义分割模型:RCA与RCM模块的实现
从零开始理解基于深度学习的语义分割模型:RCA与RCM模块的实现 随着深度学习技术的发展,图像分割任务取得了长足的进步。本文将从一个具体的PyTorch代码实例出发,带大家了解一种 novel 的语义分割网络架构——RCA(Rectangular Self-Calibration Attention)和 RCM(Rectang…...
openGl片段着色器的含义
片段着色器的含义及代码中的应用说明: 1. 片段着色器的基本概念 片段着色器(Fragment Shader)是OpenGL着色器管线中的关键组件,主要用于计算屏幕空间中每个片段(对应像素)的最终颜色。它是图形渲染流程的…...
ROS2 部署大语言模型节点
4GB GPU的DeepSeek-Coder 1.3B模型,并且它已经被量化或优化过。以下是具体的步骤: 安装必要的依赖项: pip install transformers torch grpcio googleapis-common-protos创建一个新的ROS 2包: cd ~/ros2_ws/src ros2 pkg creat…...
UART转APB模块ModelSim仿真
一、简介 之前介绍过一个UART转AHB模块,这个代码的框架有个好处,就是FPGA内总线接口比较容易修改成其他总线接口。下图是UART转AHB模块中子模块uart_ahb_mst的框图,主要有三个状态机: (1) UART_RX_FSM将接收…...
【LeetCode 题解】算法:4.寻找两个正序数组的中位数
1. 引言:挑战 LeetCode 经典算法题 在算法这片广袤无垠的天地里,一道道经典题目宛如夜空中熠熠生辉的星辰,持续吸引着开发者们投身其中,不断探索。今天,我们继续将目光聚焦于 LeetCode 平台上一道极具代表性的题目&am…...
