1 条题解

  • 0
    @ 2026-10-26 13:21:31

    思路与算法

    四位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

    信息

    ID
    1749
    时间
    1000ms
    内存
    64MiB
    难度
    入门
    标签
    递交数
    1
    已通过
    1
    上传者