第一种:
#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 是一个平方数。