2023年蓝桥杯C++国赛青少年高级组-八进制回文平方数

第一种:

#include <bits/stdc++.h>
using namespace std;
int n;
string s;
void bjz(int k)
{
    s="";
    int a[50],count=0;
    for(int i=0;k>0;i++){
        a[i]=k%8;
        count++;
        k/=8;
    }
    for(int j=count-1;j>=0;j--){
        s+=(a[j]+48);
    }    
}
bool hw(int m)
{
    bjz(m);
    string y=s;
    reverse(y.begin(),y.end());
    return s==y;
}
bool pf(int v)
{
    int num=1;
    while(v>0)
    {
        v-=num;
        num+=2;
    }
    return v==0;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        if(hw(i)&&pf(i)){
            cout<<i<<" ";
        }
    } 
    return 0;
}

第二种:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    cout<<"1 4 9";
    return 0;
}

题目描述

给定一个十进制正整数N (1≤N≤109) ,请从小到大输出1~N之间 (含1和N) 所有满足以下要求的数:
1.这个数转换为八进制后是一个回文数
2.这个数是一个平方数。
例如: N=20,在1~20之间满足要求的数有1、4、9,因为有
1转换为八进制为1,是一个回文数: 且1 = 12,是一个平方数
4转换为八进制为4,是一个回文数: 且4 = 22,是一个平方数
9转换为八进制为11,是一个回文数: 且9 = 32,是一个平方数。
故输出1 4 9

输入

输入一个十进制正整数N(1≤N≤109)

输出

输出一行,包含若干个十进制正整数,表示满足题目要求的数。结果从小到大输出,两个正整数之间用一个空格隔开

样例输入
20

样例输出
1 4 9

提示

八进制数: 指逢8进位的一种进位计数制,以0、1、2、3、4、5、6、7共八个数码表示。例如: 十进制数8等于八进制数10,十进制数64等于八进制数100,以此类推。
回文数: 反向排列与原来一样的数。例如,12321是回文数,1231不是回文数。
平方数: 可以写成某个整数的平方的数。例如,9 = 32,9 是一个平方数。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值