原题链接:蓝桥杯2014年第五届真题-拼接平方数
解题思路:
因为Case数据有点大,建表不太好,一个个数判断平方数大概也会超时,我们选择一个巧妙的方法获取
区间内平方数,区间值开方 获取某一段数再逐个平方存起来 就达成目的了( 注意区间起始点要向上取整 ),然
后分割判断即可。大概也不是很难。
参考代码:
#include <iostream> #include <cmath> using namespace std; /* 获取区间平方数 */ int find_Square(int start, int end, int squart[]) { int total = 0; for (int i = start; i <= end; i++) squart[total++] = i * i; return total; } /* 判断区间平方数 */ /* @param last 分割数字的后面部分 */ /* @param part 分割位数所用的模数 */ /* @param length 区间平方数的个数 */ void splice_Square(int squart[], int length) { for (int i = 0; i < length; i++) { int part = 10, temp = squart[i], last; while (temp / part > 0) { last = temp % part; temp /= part; /* 取开方丢弃小数 */ int sqrt_last = (int)sqrt(last); int sqrt_temp = (int)sqrt(temp); /* 0 不被当作平方数 */ if (last != 0 && temp != 0 && sqrt_last*sqrt_last == last && sqrt_temp*sqrt_temp == temp) { cout << squart[i] << endl; break; } /* part*10 进一步分割 */ part *= 10; /* 重置平方数 */ temp = squart[i]; } } } int main() { int start, end, square[1000]; cin >> start >> end; int length = find_Square(ceil(sqrt(start)), sqrt(end), square); splice_Square(square, length); return 0; }
0.0分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复