C++ 实现:计算区间内个位为3的数字之和及其3的倍数判断
好的,我们先来分析一下这道题,然后给出 C++ 的解决方案。 ## 🎯 题目分析 题目要求: 1. 找出区间 `[a, b]` 内所有**个位数是 3** 的整数。 2. 计算这些整数的和。 3. 判断这个和是否是 3 的倍数,输出 `YES` 或 `NO`。 **关键点**: - 个位数是 3 的数字满足:`n % 10 == 3`。 - 数据范围 `1 ≤ a < b ≤ 10000`,直接遍历即可,时间复杂度 O(n) 完全可行。 - 注意边界:题目说“𝑎∼𝑏 之间”,通常理解为闭区间 `[a, b]`,即包含 `a` 和 `b`。 ## 💻 C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; int sum = 0; // 遍历区间 [a, b] for (int i = a; i <= b; i++) { // 判断个位数是否为3 if (i % 10 == 3) { sum += i; } } // 输出第一行:个位数是3的数字和 cout << sum << endl; // 输出第二行:判断和是否为3的倍数 if (sum % 3 == 0) { cout << "YES" << endl; } else { cout << "NO" << endl; } return 0; } ``` ## 🔍 代码解释 1. **输入处理**:使用 `cin` 读取两个整数 `a` 和 `b`。 2. **遍历与筛选**: - 使用 `for` 循环从 `a` 到 `b`(包含两端)。 - 通过 `i % 10 == 3` 判断个位数是否为 3。 - 符合条件的数字累加到 `sum` 中。 3. **输出结果**: - 第一行输出累加和 `sum`。 - 第二行根据 `sum % 3 == 0` 判断并输出 `YES` 或 `NO`。 ## ⚠️ 注意事项与常见陷阱 - **边界理解**:题目中“𝑎∼𝑏 之间”通常指闭区间 `[a, b]`,代码中 `i <= b` 是正确的。如果理解成开区间,则需调整循环条件。 - **数据类型**:`a` 和 `b` 最大为 10000,区间内最多有 10000 个数,每个数最大 10000,累加和最大约为 `10000 * 10000 / 10 ≈ 10^7`(因为每10个数才有一个个位是3),远小于 `int` 范围(约 ±2×10^9),因此用 `int` 足够。 - **效率**:直接遍历 O(n) 在本题数据范围内完全可行,无需优化。 ## 🚀 性能优化(可选) 如果数据范围变得非常大(例如 `a, b ≤ 10^9`),直接遍历会超时。此时可以用数学方法快速计算: - 个位是 3 的数字构成一个等差数列:首项为 `first = ((a + 9) / 10 * 10) + 3`(找到 ≥ a 的第一个个位是3的数),公差为 10。 - 末项为 `last = (b / 10 * 10) + 3`(找到 ≤ b 的最后一个个位是3的数)。 - 项数 `count = ((last - first) / 10) + 1`。 - 和 `sum = (first + last) * count / 2`。 但本题数据量小,无需此优化。 ## 📚 相关学习资源 - **C++ 基础**:[cplusplus.com](http://www.cplusplus.com/doc/tutorial/) - **在线判题系统(OJ)练习**:洛谷、Codeforces、LeetCode 等平台的简单循环、条件判断题目。 - **书籍推荐**:《C++ Primer》、《算法竞赛入门经典》 ## 💡 开发建议 1. **代码可读性**:变量名使用有意义的名称(如 `sum`),适当添加注释。 2. **边界测试**:编写完代码后,可以测试几个边界情况,例如: - `a=3, b=3`(区间只有一个数且个位是3) - `a=1, b=10000`(最大数据范围) - `a=10, b=12`(区间内没有个位是3的数,和为0) 3. **模块化思维**:虽然本题简单,但可以练习将“判断个位是否为3”和“判断是否为3的倍数”写成单独的函数,提高代码复用性。 ######[AI写代码神器 | 1102点数解答 | 2026-03-13 22:19:52]
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)33
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)36
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)338
- Python:用正则表达式从含多种字符的字符串中提取英文、数字和中文单词(GPT | 522点数解答 | 2024-05-31 19:05:27)309
- Python:用正则表达式结合 split 思路提取一行字符串中的英文、数字和中文单词 (GPT | 399点数解答 | 2024-05-31 19:07:31)305
- 繁体字编码代码修改:人物名字合法性验证函数转简体版(字节豆包 | 325点数解答 | 2024-10-21 18:57:01)280
- 计算区间 n 到 m 中数字 x 出现次数的 Python 实现与详解(字节豆包 | 289点数解答 | 2025-12-07 17:14:59)66
- Python 实现:计算区间 n 到 m 中数字 x 出现的次数(字节豆包 | 322点数解答 | 2025-12-13 21:37:08)68
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)307
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)61
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)22
- C语言实现:求a+aa+aaa+...+aa...a(n个a)之和的代码解析(GPT | 214点数解答 | 2024-11-13 16:07:25)159