数字统计问题:暴力枚举与数学规律解法详解

孔良

1. 题目背景与需求分析

洛谷P1980是一道来自NOIP2013普及组的经典计数问题。题目要求统计在1到n的所有整数中,数字x(0≤x≤9)出现的次数。这类问题在编程竞赛中非常常见,考察选手对数字处理、循环控制和边界条件的把握能力。

实际应用场景包括:

  • 数据分析中的数字频率统计
  • 密码学中的数字分布研究
  • 商业统计中的销售数字分析

注意:题目中n的范围是1≤n≤1,000,000,这意味着算法的时间复杂度必须控制在O(n)以内,否则会因数据量过大导致超时。

2. 解题思路解析

2.1 暴力枚举法(基础解法)

最直观的解法是遍历1到n的每个数字,然后逐位检查是否等于x:

cpp复制int count = 0;
for (int i = 1; i <= n; i++) {
    int num = i;
    while (num > 0) {
        if (num % 10 == x) count++;
        num /= 10;
    }
}

时间复杂度分析:

  • 外层循环n次
  • 内层循环取决于数字位数,最大为7次(1,000,000是7位数)
  • 总体复杂度O(7n),在n=1e6时约7e6次操作,可以接受

2.2 数学规律法(优化解法)

更高效的解法是利用数字的数学规律,逐位计算x在每个数位上出现的次数。这种方法的时间复杂度是O(logn),适合处理更大的n值。

核心思路:

  1. 将数字拆分为个位、十位、百位等
  2. 对每一位,计算x在该位上出现的次数
  3. 累加所有位上的出现次数

3. 完整代码实现与注释

3.1 暴力解法实现

cpp复制#include <iostream>
using namespace std;

int main() {
    int n, x;
    cin >> n >> x;
    
    int count = 0;
    for (int i = 1; i <= n; i++) {
        int num = i;
        while (num > 0) {
            if (num % 10 == x) count++;
            num /= 

内容推荐

C++特殊类设计:限制拷贝、堆栈创建与继承控制
在C++面向对象编程中,类设计是构建健壮系统的核心。特殊类设计通过编译器强制约束,解决对象生命周期管理、资源安全等关键问题。从原理上看,通过控制拷贝构造函数、赋值运算符和析构函数的访问权限,可以实现禁止拷贝、堆栈创建限制等特性。C++11引入的=delete语法和final关键字,使这些约束更加直观高效。这类技术在资源管理类(如文件句柄)、线程安全对象和框架基类中有广泛应用,能有效预防内存泄漏、数据竞争等常见问题。现代C++项目常结合RAII机制和移动语义,在NonCopyable基类等模式基础上构建更安全的系统。
Zephyr设备管理:SF32平台下device指针与xxx_dt_spec对比
在嵌入式系统开发中,设备管理是RTOS的核心功能之一。Zephyr RTOS提供了两种设备访问方式:传统的device指针和新型的xxx_dt_spec结构体。device指针作为基础设备驱动模型,支持完全API访问和动态参数配置,适用于需要灵活控制的场景;而xxx_dt_spec通过设备树集成实现参数预封装,显著简化开发流程。在SF32等ARM Cortex-M平台上,两种方式在代码体积、运行时开销等方面存在明显差异。对于PWM控制等常见外设操作,xxx_dt_spec能减少20-30%的代码体积,而device指针在动态参数调整时性能更优。开发者需要根据具体应用场景(如LED控制、电机调速)选择合适方案,在SF32芯片的特殊外设配置下,还需注意定时器资源分配和引脚复用等硬件特性。
三菱FX3U与E740变频器Modbus RTU通讯实战指南
Modbus RTU作为工业自动化领域广泛应用的串行通讯协议,通过主从架构实现设备间数据交互。其采用RS485物理层,支持多点通讯和错误校验机制,在PLC与变频器控制系统中具有布线简单、可靠性高的优势。本文以三菱FX3U PLC与E740变频器为典型应用场景,详解硬件接线规范、参数配置逻辑及ADPRW指令编程方法,特别针对纺织机械恒张力控制等场景,提供多设备同步控制、参数批量写入等工程实践方案,并分享波特率优化、错误重试等现场调试经验。
S7-1200 PLC交通灯控制:从梯形图编程到触摸屏开发
PLC(可编程逻辑控制器)作为工业自动化核心设备,通过梯形图编程实现逻辑控制是其基础应用。在交通信号灯控制系统中,PLC需要处理时序逻辑、设备联动等典型工业场景,其中S7-1200系列凭借模块化设计和博途平台优势成为热门选择。掌握PLC与HMI(人机界面)的协同开发是自动化工程师必备技能,特别是在实现倒计时显示、紧急模式处理等功能时,需要合理运用数据块和SCL语言优化程序结构。本文以符合国标GB14887-2011的交通灯项目为例,详解从硬件配置到触摸屏开发的完整实现过程,特别针对初学者易出现的全红时间不足、黄灯闪烁异常等典型问题提供解决方案。
昆仑通泰触摸屏直控变频器技术解析与应用
工业自动化领域中,人机界面(HMI)与变频器的直接控制正逐渐替代传统PLC架构。通过内置运动控制引擎和Modbus/PROFIBUS等工业协议栈,现代HMI设备已具备逻辑处理能力,实现了设备成本降低35%、布线减少60%的工程效益。该技术特别适用于风机、水泵等单机设备控制,通过RS485总线更可扩展至多变频器协同场景。典型实现涉及协议适配、脚本编程及通讯优化,采用批量读写和二进制传输可将响应时间从45ms提升至15ms。随着工业物联网发展,这种集成化控制方案为智能仓储、环保设备等场景提供了更高效的实现路径。
打卡第一天:习惯养成的科学方法与心理建设
习惯养成是行为心理学和神经科学的重要研究领域,其核心在于通过重复行为建立自动化的神经通路。从技术实现角度看,打卡机制通过提供即时反馈和可视化追踪,有效强化了行为模式的建立。SMART原则等目标管理方法为习惯养成提供了可量化的框架,而多巴胺奖励机制则解释了打卡行为为何能产生持续动力。在实际应用中,结合纸质记录、移动APP等工具,打卡系统被广泛运用于个人成长、健康管理等领域。特别是在学习编程、技能提升等需要长期坚持的场景下,科学设计的打卡策略能显著提高成功率。
Kernel 5.10 eMMC深度优化与性能调优实践
eMMC作为嵌入式系统和移动设备的主流存储解决方案,其性能优化直接影响设备稳定性和用户体验。Linux内核的存储子系统通过设备检测、电源管理和初始化流程等核心机制实现对eMMC的高效管理。Kernel 5.10 LTS版本针对eMMC进行了多项深度优化,包括重构硬件检测流程、改进电源管理子系统和优化设备添加机制。这些改进显著提升了热插拔识别成功率、降低了功耗,并通过并行初始化架构缩短了设备启动时间。在嵌入式开发实践中,结合DVFS动态调频和自适应块大小配置等技术,可以进一步优化eMMC的读写性能。对于工业级应用场景,内核提供的电源故障恢复机制和低温环境适配方案,能够有效解决严苛环境下的存储稳定性问题。
模糊PID与传统PID控制算法的对比与应用
PID控制算法是工业控制领域的核心技术之一,广泛应用于温度、压力、液位等过程控制。传统PID通过固定的比例、积分、微分参数实现控制,但在非线性、时变系统中表现不佳。模糊PID控制通过动态调整参数,能够更好地适应复杂工况。本文通过Simulink仿真,对比了传统PID和模糊PID在液位控制中的性能差异,包括超调量、调节时间和抗干扰能力。模糊PID通过模糊推理规则库实现参数自适应调整,在负载突变和噪声干扰下表现更优。这种算法特别适用于工业自动化中需要高精度和强鲁棒性的场景,如钢铁、化工等行业。通过仿真波形和量化指标,展示了模糊PID在工程实践中的技术价值。
光伏并网逆变器关键技术:Boost电路与SVPWM调制解析
电力电子变换器作为新能源发电的核心设备,其核心功能是实现电能的高效转换与并网控制。Boost升压电路通过调节占空比实现电压匹配,而空间矢量PWM(SVPWM)技术则能显著提升逆变器的谐波抑制能力与电压利用率。在光伏并网系统中,这两种技术的协同应用可解决电压波动、开关损耗与谐波失真等工程难题。以典型5kW系统为例,当Boost电路采用1.5mH电感和470μF电容时,配合SVPWM的10kHz载波频率,可实现THD<2%的优质并网电流。这些技术在Matlab/Simulink仿真和DSP硬件实现中均有成熟应用方案,为光伏电站的稳定运行提供关键技术支撑。
RTOS堆栈管理:FreeRTOS实战配置与优化技巧
堆(Heap)和栈(Stack)是嵌入式实时操作系统(RTOS)中两种基础的内存管理机制。栈采用LIFO机制自动管理函数调用和局部变量,而堆则用于动态内存分配,需要开发者手动控制。在FreeRTOS中,堆管理方案从heap_1到heap_5各有特点,适用于不同场景。合理配置堆栈空间对系统稳定性至关重要,可通过uxTaskGetStackHighWaterMark()检测栈使用峰值,xPortGetFreeHeapSize()监控剩余内存。在汽车电子和物联网等高可靠性场景中,混合使用静态分配和动态内存方案能显著提升系统稳定性。
Kafka C++生产者开发实战与性能优化指南
消息队列作为分布式系统核心组件,其生产者实现需要兼顾可靠性与高性能。Kafka作为主流消息中间件,通过分区、批量发送等机制实现高吞吐。在C++生态中,基于librdkafka库开发生产者时,需重点处理内存管理、错误回调等关键问题。本文深入解析生产者核心架构,包括同步/异步发送模式对比、自定义分区策略实现,以及消息压缩算法选型。针对生产环境常见问题,提供队列积压、网络分区等场景的解决方案,并分享通过批量发送参数调优将吞吐提升5倍的实战经验。
STM32F103 Modbus从机开发实战指南
Modbus作为工业自动化领域的标准通信协议,采用主从架构实现设备间数据交互,其RTU模式通过串口传输具有高实时性特点。STM32系列MCU凭借Cortex-M内核的高效处理能力和丰富外设资源,成为协议实现的理想硬件平台。通过CubeMX工具链可快速配置USART定时器等关键外设,结合FreeModbus开源协议栈能显著降低开发门槛。该方案在PLC、传感器网络等场景中,可实现设备状态监测、远程控制等功能,其中寄存器映射设计和回调函数实现是功能定制的核心环节。开发过程中需特别注意波特率匹配、终端电阻配置等工程细节,而DMA传输和多从机支持则是提升系统性能的关键技术。
ILI9806G屏幕汉字显示优化与问题排查
TFT液晶屏驱动在嵌入式系统中广泛应用,其中ILI9806G因其高性价比成为热门选择。在显示技术中,汉字处理涉及多字节编码转换、字库存储和像素渲染等关键技术。通过SPI或FSMC接口驱动时,工程师常遇到字符乱码、显示错位等典型问题,这往往与字库取模方式和屏幕初始化参数密切相关。在智能家居控制面板等场景中,优化显示性能需要采用双缓冲机制、DMA传输等技术方案。本文以野火开发板为例,详解如何通过调整0x36寄存器参数、优化字库存储方案(SPI FLASH vs SD卡)等手段,实现稳定高效的汉字显示系统。
异步电机控制仿真与参数调优实战指南
电机控制仿真是工业自动化领域的核心技术,尤其对于异步电机这类非线性系统,参数辨识与模型验证直接影响控制算法落地效果。通过标准化测试流程(空载/堵转测试)和MATLAB工具实现电机参数自动提取,结合Simulink仿真与TwinCAT3代码生成构建完整验证链条。针对算法跑飞问题,采用三级保护机制(输入预处理、核心算法保护、后置监控)确保系统稳定性。在纺织机械等典型应用场景中,这套方法使新算法验证周期缩短80%,显著提升开发效率。
LN2266低电压PWM升压芯片应用与设计指南
DC/DC升压转换器是便携式设备电源管理的核心组件,通过PWM控制实现高效电压转换。LN2266作为一款超低压启动的升压芯片,采用1.2MHz固定频率PWM控制,支持0.9V最低启动电压,在物联网设备和可穿戴装置中表现优异。其SOT-23-6封装和85%的转换效率,完美解决了蓝牙耳机、智能手表等设备对微型化和低功耗的严苛要求。该芯片内置过流、过热等多重保护机制,配合2.2μH小型电感即可构建完整升压方案,是电池供电系统的理想选择。
C++中.cc文件的作用与最佳实践
在C++开发中,源文件扩展名.cc和.cpp都用于存储实现代码,它们本质上是等效的,主要区别在于历史渊源和项目规范。.cc文件源自Unix/Linux传统,被Google等开源项目广泛采用,特别是在使用Protocol Buffers等代码生成工具时常见。理解文件扩展名的选择原则、构建系统集成方法以及现代C++项目中的最佳实践,对于保持代码一致性和可维护性至关重要。本文以bike.pb.cc为例,深入解析了protobuf生成的.cc文件结构,并提供了跨平台开发、性能优化和安全编程的实用建议,帮助开发者高效处理C++项目中的.cc文件。
嵌入式系统硬件架构与选型实战指南
嵌入式系统作为专用计算机系统的典型代表,其硬件架构设计直接决定了系统性能和可靠性。从处理器选型到存储分层,从接口配置到电源管理,每个环节都需要遵循嵌入式设计特有的'够用就好'原则。ARM、RISC-V和X86架构处理器各具优势,需要根据实时性、功耗和生态需求进行选择。存储系统采用金字塔分层设计,NOR Flash和NAND Flash在启动代码与数据存储场景中各有千秋。输入输出接口配置需平衡实时性与带宽需求,而电源管理电路设计则直接影响设备续航能力。通过合理的硬件选型与架构设计,可以打造出高性能、低功耗的嵌入式系统,广泛应用于智能家居、工业控制和医疗设备等领域。
STM32遥控小车开发:NRF24L01无线通信与L298N电机驱动实战
嵌入式系统开发中,无线通信和电机驱动是两个基础且关键的技术模块。通过2.4GHz无线模块实现设备间数据传输,配合H桥驱动电路控制直流电机,可以构建完整的运动控制系统。NRF24L01作为低成本无线解决方案,支持多通道通信和可调传输速率;L298N则是经典的电机驱动芯片,能实现正反转和PWM调速。这种技术组合在智能小车、机器人控制等场景有广泛应用。本文以STM32F103C8T6为主控,详细解析无线遥控小车的硬件设计要点和软件实现方案,包括SPI通信配置、电机驱动电路优化以及抗干扰设计等工程实践内容。
P2并联混动系统Simulink建模与能量管理策略
混合动力系统通过发动机与电机的协同工作实现能效提升,其中P2并联架构因其兼顾纯电驱动与传统传动优势成为主流方案。从技术原理看,该系统通过离合器实现动力源动态耦合,需在Simulink中精确建模机械连接与电气特性。工程实践中,Magic Formula轮胎模型和传动系统惯量等效等关键技术直接影响仿真精度,而基于Stateflow的多模式能量管理策略则是实现燃油经济性的核心。在新能源汽车开发中,此类建模方法可有效优化扭矩分配算法,解决模式切换平顺性问题,并为NEDC工况验证提供可靠工具链。
游戏金手指:从作弊工具到怀旧文化的演变
游戏修改工具(通常称为金手指)通过直接访问和修改游戏内存数据实现作弊功能,其核心技术原理涉及内存地址扫描与数值覆写。这类工具在游戏开发测试和玩家体验优化中具有独特价值,既能帮助开发者快速调试,也能让玩家自定义游戏难度。从早期的GameShark硬件卡带到现代模拟器插件,金手指技术已发展出硬件破解、软件注入等多种实现方式,在PSP、Switch等平台形成差异化解决方案。当前应用场景主要集中在怀旧游戏社区和单机游戏修改领域,其中PS1金手指转PSP等经典方案仍被广泛使用。随着游戏安全机制升级,现代主机如Switch的金手指使用门槛显著提高,促使玩家更关注模拟器方案的安全性和兼容性问题。
已经到底了哦
精选内容
热门内容
最新内容
正弦波电动自行车控制器设计与优化实践
电动自行车控制器作为电机驱动系统的核心部件,其性能直接影响整车的能效与用户体验。传统方波控制器存在噪音大、效率低等问题,而采用SPWM(正弦脉宽调制)技术的正弦波控制器通过平滑的电流波形,显著降低了电机运行噪音并提升能效。本文以FOC(磁场定向控制)算法为核心,结合32位MCU的硬件设计,详细解析了如何实现高效率、低噪音的电机控制方案。重点探讨了功率器件选型、PCB布局优化、量产测试策略等工程实践要点,并提供了故障诊断与二次开发的实用建议。对于从事电机控制或电动车辆开发的工程师,这些经过量产验证的技术方案具有重要参考价值。
工业自动化多协议通信框架设计与实践
工业通信协议是连接自动化设备的核心技术,涉及Modbus、OPC UA等多种标准。其核心原理是通过协议转换实现异构设备互联,关键技术包括并发调度、异常恢复等。在智能制造场景中,高效的通信框架能显著提升设备协同效率,降低运维成本。本文介绍的工业通信框架采用Actor模型实现高并发处理,支持17种主流协议动态加载,通过协议矩阵兼容和故障自愈体系,解决了汽车制造等场景中多品牌设备互联的难题。该方案在200+设备并发场景下实现21500 msg/s的吞吐量,为工业4.0设备互联提供了可靠的技术支撑。
Amlogic平台遥控器适配全解析:从原理到实战
嵌入式设备开发中,输入设备适配是基础且关键的技术环节。以红外/蓝牙信号解析为例,其核心在于建立物理信号与系统键值的准确映射关系。Amlogic芯片平台通过remote.conf配置文件与meson-remote驱动模块实现该功能,这种方案在智能电视、机顶盒等领域广泛应用。实际开发中需处理信号抖动、键值冲突等典型问题,合理配置repeat_delay、tolerance等参数可显著提升稳定性。本文以Amlogic平台为例,详解遥控器适配的技术原理与工程实践,涵盖信号采集、键值映射、驱动调试等全流程,为嵌入式输入设备开发提供实用解决方案。
车载信号与数据链路技术解析及应用指南
车载信号与数据链路技术是现代汽车电子系统的核心基础。信号传输涉及PWM、FSK等调制技术,确保传感器数据可靠传递;数据链路则通过CAN、LIN等总线协议建立通信通道。这些技术解决了汽车复杂电磁环境下的抗干扰和实时性需求,广泛应用于发动机控制、ADAS等场景。随着自动驾驶发展,车载以太网和TSN等高速传输技术正成为行业热点。掌握信号完整性分析和协议栈配置等工程实践技能,对汽车电子系统开发至关重要。
RK3588 NPU部署YOLOv5实战与优化指南
边缘计算中的NPU加速技术正成为AI部署的关键,通过专用神经网络处理器可实现较传统CPU数倍的推理速度提升。以瑞芯微RK3588为例,其6TOPS算力的NPU配合YOLOv5这类平衡精度与速度的目标检测模型,能在安防、工业质检等实时场景发挥显著优势。技术实现上,模型需通过ONNX中间格式转换,并针对NPU特性进行量化与优化,包括动态尺寸支持、混合精度量化等关键步骤。实际部署时还需考虑内存分配、多线程调度等工程优化,最终在边缘设备上实现低延迟、高效率的AI推理方案。本文以YOLOv5s在RK3588平台的部署为例,详解从模型导出、RKNN转换到性能调优的全流程实践。
FPGA与Matlab联合实现高性能多普勒频移解调系统
多普勒频移解调技术是医疗超声和工业无损检测中的核心技术,用于精确测量流体速度和运动物体检测。其原理基于信号处理中的混频与滤波技术,通过FPGA的并行计算能力实现硬件加速,可大幅提升系统实时性和能效比。在工程实践中,DDS信号生成和数字滤波器的优化设计是关键,需要结合Matlab算法仿真与FPGA硬件实现。本方案采用Xilinx Artix-7平台,通过32位相位累加器和多级流水线设计,将处理延迟控制在5μs以内,相比传统DSP方案性能提升20倍,特别适合对实时性要求严格的医疗超声检测和工业探伤应用场景。
40nm工艺SNN加速器设计:数字IC与脉冲神经网络的融合实践
脉冲神经网络(SNN)作为类脑计算的重要实现方式,通过模拟生物神经元的脉冲编码机制,在能效比上展现出显著优势。其核心原理是将连续时间动态转化为离散事件处理,采用积分-发放模型实现信息传递。这种事件驱动特性使得SNN在边缘计算、低功耗AI场景具有独特价值。本文以40nm工艺数字IC设计为例,详细解析了SNN加速器开发中的关键技术:包括神经元核心的Verilog实现、异步事件到同步电路的转换策略,以及时钟门控、近阈值电压等低功耗设计方法。特别针对RTL设计、UVM验证框架改造等工程实践难点,提供了经过流片验证的解决方案。实测数据显示,该设计实现3.2TOPS/W的能效比,为传统架构的5倍,展现了SNN在AI加速领域的巨大潜力。
微电网三电池组分布式下垂控制与SOC均衡策略
分布式储能系统通过多电池组协同工作提升微电网可靠性,其核心技术在于下垂控制策略。下垂控制模拟同步发电机外特性,通过频率/电压与功率的线性关系实现自主功率分配。在新能源发电和智能电网应用中,SOC(荷电状态)动态均衡是确保电池组寿命的关键技术。针对三电池组系统,引入SOC均衡因子修正传统下垂方程,使高SOC电池承担更多放电负荷。该方案在Simulink建模中需集成电池等效电路、逆变器控制等模块,并通过安时积分法实现SOC估算。工程实践中需平衡均衡速度与系统稳定性,典型应用场景包括离网微电网和可再生能源储能系统。
QT视图控件详解:QListView、QTableView与QTreeView应用指南
在GUI开发中,模型/视图架构是实现数据与显示分离的核心设计模式。QT框架通过QAbstractItemView基类提供了统一的视图控件接口,其子类QListView、QTableView和QTreeView分别针对列表、表格和树形数据结构进行了优化实现。这种架构通过数据模型抽象层,使开发者能够灵活处理各种数据源,同时保持界面响应性能。视图控件在文件管理系统、数据库应用和复杂数据展示等场景中表现优异,特别是结合委托(Delegate)机制可以实现高度自定义的单元格渲染。通过合理使用QStandardItemModel或自定义QAbstractItemModel子类,配合视图控件的选择模式、排序过滤等功能,能显著提升开发效率。对于性能敏感场景,可采用懒加载、批量更新等技术优化大数据集处理。
嵌入式系统开发:从硬件选型到AI实战全指南
嵌入式系统作为专用计算机系统,以实时性、低功耗和小型化为核心特征,广泛应用于智能硬件和物联网领域。其开发涉及硬件架构设计、实时操作系统和交叉编译工具链等技术栈,其中ARM Cortex-M系列处理器凭借其高效能特性成为主流选择。在AI时代,嵌入式设备通过模型量化和硬件加速实现在端侧部署神经网络,典型如Rockchip RK3588的6TOPS NPU。开发过程中,从STM32开发板入门到嵌入式Linux系统构建,需要掌握外设驱动开发、RTOS应用等关键技能。对于初学者,建议通过STM32F103C8T6等开发板实践,结合Keil MDK和ARM GCC工具链,循序渐进构建完整的嵌入式开发知识体系。
已经到底了哦