专栏文章

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

B4276题解参与者 2已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@mipq53rz
此快照首次捕获于
2025/12/03 16:07
3 个月前
此快照最后确认于
2025/12/03 16:07
3 个月前
查看原文

思路

直接枚举 ii 的值,时间复杂度 O(n)\mathcal{O}(n)
显然过不了。
枚举 11n\sqrt{n},再将他们平方之后转化成 8 进制后是不是回文数。
枚举回文数只需要转化进制时存入一个数组,然后判断是否对称即可。

代码

CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 100 + 10;
int a[N];
bool jz(int n){
    int i = 0;
    while(n != 0){
        a[i ++] = n % 8;
        n /= 8;
    }//转换进制
    for (int j = 0;j < i / 2;j++){
        if (a[j] != a[i - j - 1]) return false;
    }//判断回文
    return true;
}
int main()
{
    int n;cin >> n;
    for (int i = 1;i * i/*写成 sqrt(n) 精度容易出问题*/ <= n;i++){
        int x = i * i;
        if (jz(x)) {
            cout << x << " ";
        }
    }
    return 0;
}

评论

2 条评论,欢迎与作者交流。

正在加载评论...