枚举所有可能的平方数,范围仅限于不超过 109 的正整数。
设 i 从 1 到 ⌊109⌋≈31622,那么 x=i2 即为待考察的平方数。
对于每一个平方数 x,将其转换为十进制字符串 s。
枚举所有可能的分割位置 cut(1≤cut<len(s)),将字符串分成左右两个非空子串:
我们称一个非负整数为平方数,如果它可以表示为某个整数 k 的平方 k2。例如,前几个平方数是 0,1,4,9,16,25。
现在定义一种特殊的正整数,称为“双子平方数”。一个正整数 x 是双子平方数,当且仅当:
'0'。例如,49 可以在 4 和 9 之间分割,分别得到平方数 4 和 9,且 49 本身是平方数,因此 49 是一个双子平方数。
现在给定若干上界,请你统计不超过给定上界的双子平方数的个数。
数据范围:测试数据组数 T 不超过 50,每个上界 n 不超过 109。
第一行包含一个整数 T(1≤T≤50),表示测试数据组数。接下来 T 行,每行包含一个整数 n(1≤n≤109),表示上界。
对于每组测试数据,输出一行一个整数,表示不超过 n 的双子平方数的个数。
输入
1
48
输出
0
说明
对于 n=48,不存在不超过 48 的双子平方数。最小的双子平方数是 49=72,它可以分割为 4 和 9,4=22,9=32,且两段均无前导零,因此 49 是双子平方数,但 49>48,故答案为 0。
输入
1
360
输出
2
说明
对于 n=360,不超过 360 的双子平方数有 49 和 169,共 2 个。
其中 49=72 可分割为 4 和 9;169=132 可分割为 16 和 9(16=42,9=32)。下一个双子平方数是 361=192,可分割为 36 和 1,但 361>360,不含在内。
输入
1
5000
输出
8
说明
对于 n=5000,不超过 5000 的双子平方数共 8 个,按升序排列为:
49=72(分为 4 和 9)
169=132(分为 16 和 9)
361=192(分为 36 和 1)
1225=352(分为 1 和 225,225=152)
1444=382(分为 144 和 4,144=122)
1681=412(分为 16 和 81,81=92)
3249=572(分为 324 和 9,324=182)
4225=652(分为 4 和 225,225=152)
下一个双子平方数为 15625=1252,已超过 5000,因此答案为 8。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册