C++ 寻找各位平方和等于自身的两位数
好的,我们来分析一下这个问题。题目要求找出“每位的平方和等于这个数本身”的两位数。翻译一下,就是:对于一个两位数 `10a + b`(其中 `a` 是十位,`b` 是个位),要求满足: ``` a² + b² = 10a + b ``` 其中 `a` 的范围是 1 到 9,`b` 的范围是 0 到 9。 --- ## 🧮 数学分析 我们可以手动推理一下: 设: ``` a² + b² = 10a + b ``` 整理得到: ``` a² - 10a + b² - b = 0 ``` 或者: ``` a(a - 10) + b(b - 1) = 0 ``` 由于 `a` 是1到9,`a - 10` 是负数,所以 `a(a - 10)` 是负数。`b(b - 1)` 对于 `b` 在0到9之间是非负的。两者相加为0的情况很少。 我们可以枚举所有两位数(10到99)来验证。 --- ## 💻 C++ 代码实现 ```cpp #include <iostream> int main() { int count = 0; for (int num = 10; num <= 99; ++num) { int a = num / 10; // 十位 int b = num % 10; // 个位 if (a * a + b * b == num) { std::cout << "找到: " << num << " (因为 " << a << "^2 + " << b << "^2 = " << a*a << " + " << b*b << " = " << num << ")" << std::endl; count++; } } if (count == 0) { std::cout << 0 << std::endl; } else { std::cout << "总数: " << count << std::endl; } return 0; } ``` --- ## 🧪 程序输出示例 运行这段代码后,输出将是: ``` 找到: (因为 ...) 总数: 0 ``` 或者列出所有符合条件的数字。 --- ## ✅ 验证结果 实际上,经过枚举,**没有两位数满足“每位的平方和等于它本身”** 这个条件。原因在于: - 对于两位数,`10a + b` 至少是10,而 `a² + b²` 最大时 `a=9,b=9` 也只有 `81+81=162`,但接近时仍无法满足等式。 - 例如 `00` 不是两位数,`01` 也不是两位数,最小的两位数是10。 所以最终输出应该是 **0**。 --- ## 📌 开发建议 1. **代码结构清晰**:将校验逻辑写成函数 `bool isSpecial(int n)` 更方便扩展。 2. **边界检查**:虽然本题固定,但养成习惯检查输入范围。 3. **使用常量**:如 `MIN_TWO_DIGIT = 10`, `MAX_TWO_DIGIT = 99` 提高可读性。 4. **输出格式**:题目要求只输出总数,所以实际提交时只需输出数字0即可,不需要打印每个数字。 --- ######[AI写代码神器 | 728点数解答 | 2026-06-05 19:25:15]
- 两位数,它的个位、十位上数字的平方和是质数。有哪些 (字节豆包 | 4096点数解答 | 2026-05-22 19:42:54)13
- 个位十位平方和为质数的两位数求解方法(DeepSeek | 848点数解答 | 2026-05-22 19:45:12)16
- C++ 实现:找出个位十位数字平方和为质数的所有两位数(DeepSeek | 377点数解答 | 2026-05-22 19:46:24)11
- 用 JS 代码巧妙判断 a 与 b 关系:输出对应结果 ( | 47点数解答 | 2024-05-20 22:10:14)350
- 体育课同学体力值平衡划分:利用前缀和高效解题(DeepSeek | 692点数解答 | 2025-06-18 19:19:39)198
- Python 实现:根据甜度值为甜甜圈评定等级(字节豆包 | 243点数解答 | 2025-12-06 18:35:50)104
- Java实现:根据输入的三个浮点数求解一元二次方程根的判别与输出(字节豆包 | 329点数解答 | 2025-12-10 22:05:16)72