[蓝桥杯 2014 国 C] 拼接平方数
题目描述
小明发现 49 49 49 很有趣,首先,它是个平方数。它可以拆分为 4 4 4 和 9 9 9,拆分出来的部分也是平方数。 169 169 169 也有这个性质,我们权且称它们为:拼接平方数。
100 100 100 可拆分 1 , 00 1,00 1,00,这有点勉强,我们规定, 0 , 00 , 000 0,00,000 0,00,000 等都不算平方数。
小明想:还有哪些数字是这样的呢?
你的任务出现了:找到某个区间的所有拼接平方数。
输入格式
两个正整数 a , b ( a < b < 1 0 6 ) a,b(a<b<10^6) a,b(a<b<106)。
输出格式
若干行,每行一个正整数。表示所有的区间 [ a , b ] [a,b] [a,b] 中的拼接平方数,从小到大输出。
样例 #1
样例输入 #1
169 10000
样例输出 #1
169
361
1225
1444
1681
3249
4225
4900
9025
提示
时限 1 秒, 256M。蓝桥杯 2014 年第五届国赛
思路
首先,定义一个整数数组ans,这个数组预先存储了所有的拼接平方数。
在main函数中,读取两个输入a和b,这两个输入表示要查找的区间。
接下来,遍历预先存储的拼接平方数数组ans。如果数组中的数在输入的区间内,就输出这个数。
AC代码
#include <algorithm>
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;int n;
const int ans[] = {49, 169, 361, 1225, 1444, 1681, 3249,4225, 4900, 9025, 15625, 16900, 36100, 42025,49729, 64009, 81225, 93025, 105625, 122500, 144400,168100, 225625, 237169, 256036, 324900, 422500, 490000,519841, 576081, 819025, 902500, 950625, 970225};int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int a, b;cin >> a >> b;for (const auto i : ans) {if (a <= i && i <= b) {cout << i << "\n";}}return 0;
}