题解:B4276 [蓝桥杯青少年组国赛 2023] 八进制回文平方数

· · 题解

解题思路

考虑暴力,枚举 1 \sim n,判断每个数是否合法,复杂度 O(n\log n)

考虑优化,我们可以尝试枚举所有的平方数,再判断转换为八进制后是否一个回文数,时间复杂度 O(\sqrt n\log \sqrt n)

AC_Code

#include <iostream>
#include <algorithm>

using namespace std;

int n;

bool is_pali(string str)
{
    string rts = str;
    reverse(rts.begin(), rts.end());
    return rts == str;
}

string get(int x)
{
    string res;
    while (x)
        res += x % 8 + '0', x /= 8;
    return res;
}

int main()
{
    cin >> n;
    for (int i = 1; i <= n / i; ++ i )
        if (is_pali(get(i * i)))
            cout << i * i << ' ';

    return 0;
}