酷代码 AI
菜单
服务商

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]