1 条题解
-
0
思路与算法
四位aabb可以写成1100a+11b。枚举a=1至9、b=0至9,对每个候选取整数平方根k并检查k*k是否等于该数,是则输出。
正确性说明
a非零保证四位,两个数字的构造保证前两位、后两位分别相同。每个形如aabb的四位数恰好对应一个枚举对,不漏不重。平方检查仅接受完全平方数,a、b递增也对应数值递增。独立答案枚举32至99的整数平方并检查十进制文本,结果相同。
复杂度
固定90次枚举,时间O(1)、空间O(1),初始化O(1)。所有候选小于10000,整数乘法与平方根舍入后的等式检查均安全。
易错点
a不能为0,b可以为0。不能只判断sqrt(n)接近某整数而不回乘验证。每个结果单独一行;无输入题单点包含所有结果。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { for (int a = 1; a <= 9; ++a) for (int b = 0; b <= 9; ++b) { int n = 1100 * a + 11 * b; int k = sqrt(n); if (k * k == n) cout << n << "\n"; } }
- 1