当前位置: 首页 > news >正文

【GESP 一级】洛谷 B3864 小明的幸运数 题解

一、题目概述

本题是GESP 2023 年 9 月一级认证真题,对应洛谷题号 B3864,是入门阶段的经典条件筛选与累加求和题,核心是根据双重条件筛选数字并计算总和。

题目可以简化为:输入三个整数kLR,求区间[L, R]内,所有满足以下条件之一的数字之和:

  1. 数字的个位数是 k
  2. 数字是k 的倍数

注意:如果一个数同时满足两个条件(比如7,既是 7 的倍数,个位也是 7),只计算一次,不重复累加。


二、核心考察点

这道题覆盖了 GESP 一级的多个高频考点,同时锻炼了逻辑判断和去重思维:

考点考察内容难度
循环结构使用for循环遍历区间[L, R]内的所有数字⭐⭐
条件判断双重条件筛选(个位数判断 + 倍数判断)⭐⭐⭐
取模运算%10获取个位数、%k判断倍数⭐⭐
变量累加使用变量记录符合条件数字的总和⭐⭐
逻辑去重避免同时满足两个条件的数字被重复计算⭐⭐⭐

三、解题思路分析

1. 核心逻辑拆解

要解决这道题,我们需要:

  1. 遍历区间[L, R]内的每一个数字i
  2. 判断i是否满足 “个位数为 k”“是 k 的倍数”;
  3. 如果满足条件,就把i累加到总和变量中;
  4. 遍历结束后,输出总和。

关键细节:用if (条件1 || 条件2)可以天然实现去重,因为||逻辑或只会让条件成立的数字被加一次,不会重复计算。

2. 两个关键条件的实现

  • 个位数是 k:数字的个位数可以用i % 10获取,判断条件为i % 10 == k
  • 是 k 的倍数:判断条件为i % k == 0

3. 整体解题流程

  1. 读取输入的三个整数kLR
  2. 初始化总和变量sum = 0
  3. for循环从L遍历到R
    • 对每个数字i,判断是否满足i % 10 == k || i % k == 0
    • 如果满足,sum += i
  4. 循环结束后,输出sum

四、易错点提醒(考试避坑)

  1. 区间边界错误循环必须从L开始,到R结束(for (int i = L; i <= R; i++)),题目要求包括LR

  2. 重复计算问题不能用两个独立的if语句分别判断条件(比如先判断个位数,再判断倍数,都累加),否则会导致同时满足两个条件的数字被加两次,结果偏大。

  3. 个位数判断错误个位数是用i % 10,不是i / 10,后者得到的是十位数及以上的部分。

  4. 倍数判断的顺序倍数判断是i % k == 0,不是k % i == 0,后者逻辑完全颠倒。

  5. 边界值测试

    • 数字同时满足两个条件:如样例 1 中的7,只计算一次;
    • 区间内没有符合条件的数字:如k=7, L=8, R=13,结果为 0;
    • 区间只有一个数字:如L=R=7,结果为 7。

五、完整 C++ 代码

#include <iostream> using namespace std; int main() { int k, L, R; cin >> k; cin >> L; cin >> R; int sum = 0; // 初始化总和为0 // 遍历区间[L, R]内的所有数字 for (int i = L; i <= R; ++i) { // 判断是否满足条件之一:个位是k 或 是k的倍数 if (i % 10 == k || i % k == 0) { sum += i; // 符合条件,累加到总和 } } cout << sum << endl; return 0; }

六、扩展练习(举一反三)

学会这道题的核心逻辑后,可以试试以下扩展练习,巩固类似的条件筛选与累加能力:

练习 1:修改条件 —— 双条件同时满足

题目变形:求区间[L, R]内,同时满足“个位数是 k” 和 “是 k 的倍数” 的数字之和。

  • 提示:把||改成&&即可。

练习 2:扩展位数 —— 十位数也是 k

题目变形:求区间[L, R]内,个位数是 k十位数是 k是 k 的倍数的数字之和。

  • 提示:十位数可以用i / 10 % 10获取,新增条件(i / 10) % 10 == k

练习 3:反向筛选 —— 排除特定数字

题目变形:求区间[L, R]内,不满足“个位数是 k” 也不是“k 的倍数” 的数字之和。

  • 提示:把条件改成!(i % 10 == k || i % k == 0),或者用&&连接两个否定条件。

练习 4:多条件计数 —— 统计幸运数个数

题目变形:不计算和,改为统计区间[L, R]内,符合条件的 “幸运数” 有多少个。

  • 提示:把累加sum += i改成计数变量cnt++,最后输出cnt

练习 5:自定义规则 ——“k 的幸运数字” 升级

题目变形:自定义 “幸运数字” 规则,比如:

  • 规则 A:数字包含数字 k(如 k=7,数字 17、71、70 都算);
  • 规则 B:数字是 k 的倍数,或者各位数字之和是 k;求区间[L, R]内符合规则的数字之和。

七、总结

这道题的核心是循环遍历 + 多条件筛选 + 累加求和,是 GESP 一级中非常经典的综合应用题。

通过这道题,你不仅掌握了取模运算、循环遍历和条件判断,还理解了逻辑或(||)的去重特性,这对后续学习更复杂的筛选问题非常有帮助。

http://www.jsqmd.com/news/737675/

相关文章:

  • 终极跨平台流媒体下载指南:N_m3u8DL-RE技术深度解析
  • 构建AI长期记忆系统:从向量数据库到个性化助手实践
  • 如何在Amlogic S9xxx电视盒子上运行Armbian系统:完整配置指南
  • Code Interpreter API实战:逆向工程实现AI代码执行自动化
  • 众智商学院学习资源多吗? - 众智商学院官方
  • 终极指南:如何安全地在本地导出浏览器Cookie文件
  • 告别混乱!用AD19的‘查找相似对象’和规则管理器,高效完成一块STM32核心板的后期处理
  • Win10时间显示太简陋?用这招让你的任务栏时间变成“信息中心”(含小任务栏按钮问题解决)
  • 魔兽争霸3帧率优化全攻略:WarcraftHelper如何让你的经典游戏焕发新生
  • 整合Taotoken与自动化工具为海量视频片段批量生成个性化描述
  • 批量下载叶绿素a的方法
  • OpenCore Legacy Patcher完整指南:让2008-2017款旧Mac免费升级最新macOS的终极方案
  • 戴尔G15终极散热控制:如何解锁笔记本性能的完整指南?
  • 别再纠结了!FPGA项目选PMOD、FMC还是SYZYGY?一张图帮你搞定接口选型
  • 大模型安全干预:机制与向量操控实践
  • 3步突破网盘下载限速:LinkSwift八大平台高速下载实战秘籍
  • 企业与政府即时通讯工具选型,看这三个维度就够了 - 小天互连即时通讯
  • Wireshark 3.x实战:手把手教你用密钥日志文件解密恶意软件的HTTPS流量(附Dridex样本分析)
  • 视觉语言模型中的几何先验与4D动态推理技术
  • 设计师的“魔法棒“:用ZXPInstaller一键解锁Adobe扩展新世界
  • 别再只跑TwoSampleMR了!用本地VCF文件做LDSC遗传相关性分析,效率提升10倍(附完整R代码)
  • ESP固件烧录神器:5分钟掌握esptool完整使用指南
  • 深度解析抖音无水印下载技术:架构设计与最佳实践
  • Linux驱动调试利器:不写代码,用sysfs直接玩转GPIO(以IMX6ULL为例)
  • 【2024最严苛Tidyverse审计报告】:92.7%的自动化报表项目在v2.0下存在静默数据污染风险
  • TranslucentTB:为Windows任务栏注入灵魂的魔法师
  • VMware Workstation Pro 17免费激活指南:3种高效解决方案
  • 从Pangu到PolarDB:阿里云XRDMA通信库如何支撑起核心存储系统的超低延迟网络
  • 3分钟视频转PPT:高效自动化内容提取方案
  • Three.js地图点击交互避坑指南:如何用Raycaster精准选中GeoJSON生成的3D省份模型