原题链接:蓝桥杯2014年第五届真题-拼接平方数
参考代码:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
// 用于表示拼接平方数被分成的两部分
int one,two,ones,twos;
// 用于存储拼接平方数
int c[10000]={};
int temp=0;
// 用于分割
int fen;
// 用于循环
int flag;
// 找出[a,b]范围内的平方数
for(int i=sqrt(a);i<=sqrt(b);i++){
if(i*i>=a&&i*i<=b){
c[temp++]=i*i;
}
}
int t=1;
for(int i=0;i<temp;i++){
// 对于两位数和一位数以内的可以数过来,直接比较输出即可
if(c[i]<100&&t){
// 100以内,一位数和两位数只有49符合要求
cout<<49<<endl;
t=0;
}
// 对于三位数的平方数,判断1+2和2+1两种情况
flag=2;
fen=10;
if(c[i]>100&&c[i]<1000){
while(flag){
one=c[i]/fen;
two=c[i]%fen;
ones=floor(sqrt(one)+0.5);
twos=floor(sqrt(two)+0.5);
//当两个部分都是平方数
if(ones==sqrt(one)&&twos==sqrt(two)&&sqrt(two)!=0){
cout<<c[i]<<endl;
break;
}
fen=10*fen;
flag--;
}
}
// 对于四位数的平方数,判断1+3,2+2,3+1
flag=3;
fen=10;
if(c[i]>1000&&c[i]<10000){
while(flag){
one=c[i]/fen;
two=c[i]%fen;
ones=floor(sqrt(one)+0.5);
twos=floor(sqrt(two)+0.5);
//当两个部分都是平方数
if(ones==sqrt(one)&&twos==sqrt(two)&&sqrt(two)!=0){
cout<<c[i]<<endl;
break;
}
fen=10*fen;
flag--;
}
}
//对于五位平方数,有1+4,2=3,3+2,4+1四种
flag=4;
fen=10;
if(c[i]>10000&&c[i]<100000){
while(flag){
one=c[i]/fen;
two=c[i]%fen;
ones=floor(sqrt(one)+0.5);
twos=floor(sqrt(two)+0.5);
//当两个部分都是平方数
if(ones==sqrt(one)&&twos==sqrt(two)&&sqrt(two)!=0){
cout<<c[i]<<endl;
break;
}
fen*=10;
flag--;
}
}
// 对于六位数
flag=5;
fen=10;
if(c[i]>100000&&c[i]<1000000){
while(flag){
one=c[i]/fen;
two=c[i]%fen;
ones=floor(sqrt(one)+0.5);
twos=floor(sqrt(two)+0.5);
//当两个部分都是平方数
if(ones==sqrt(one)&&twos==sqrt(two)&&sqrt(two)!=0){
cout<<c[i]<<endl;
break;
}
fen*=10;
flag--;
}
}
}
return 0;
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复