#8872. 寻找雷劈数(循环入门)
寻找雷劈数(循环入门)
Problem: 寻找雷劈数(循环入门)
版权信息
任务总览表 任务名称:寻找雷劈数 时间限制:1000ms 内存限制:256MiB 分数:9
题目描述
雷劈数是一种特殊的四位数。我们可以将这个数分为两部分,分别计算这两部分的和,再将结果平方,若得到的结果等于原数,则该数为雷劈数。
例如,数 3025 可以分为 30 和 25,它们的和是 55,然后 55 × 55 = 3025,因此 3025 是一个雷劈数。
要求找出所有符合这种条件的四位数。
输入格式
- 无
输出格式
- 输出所有符合条件的四位数,每个四位数占一行,从小到大输出。
样例输出 1
2025
3025
9801
提示
- 所有输出的雷劈数是四位数。
- 可以将四位数分成两部分,每部分都是两位数。
题目分析
给定一个四位数 N = abcd,我们可以将其分为前两位和后两位,分别记作 ab 和 cd。接下来检查 **(ab + cd)² 是否等于 N**,若成立,则 N 为雷劈数。
数学表达式:
- N = 100a + 10b + c + d
- ab = 10a + b
- cd = 10c + d
然后验证条件:
时间复杂度分析
- 需要遍历所有四位数,即从 1000 到 9999,检查每个数是否满足雷劈数的条件。
- 对于每个四位数,计算分割后的两部分之和并平方,操作量为常数级别 **O(1)**。
- 总体时间复杂度是 **O(9000)**,即最多进行 9000 次计算,这是可以接受的。
解题思路
- 数字拆分:四位数 N 可以表示为:
其中,ab 是由 a 和 b 组成的两位数,cd 是由 c 和 d 组成的两位数。
- 数学表达:将四位数 N = abcd 拆分为前两位和后两位,得出:
验证条件:如果满足以下条件:
= N那么 N 就是一个雷劈数。
- 遍历:我们可以遍历所有四位数,从 1000 到 9999,对每个四位数执行上述的拆分和验证条件。符合条件的数字即为雷劈数。
例子
- 3025:
- 拆分为 ab = 30, cd = 25。
- **(ab + cd) = 30 + 25 = 55**。
- 55 × 55 = 3025,因此 3025 是一个雷劈数。
- 2025:
- 拆分为 ab = 20, cd = 25。
- **(ab + cd) = 20 + 25 = 45**。
- 45 × 45 = 2025,因此 2025 是一个雷劈数。
- 9801:
- 拆分为 ab = 98, cd = 01。
- **(ab + cd) = 98 + 1 = 99**。
- 99 × 99 = 9801,因此 9801 是一个雷劈数。
结论
通过拆分每个四位数为两部分,计算它们和的平方,再验证结果是否等于原始四位数,我们可以找出所有符合条件的雷劈数。这个问题本质上就是寻找符合特定数学条件的四位数,不需要复杂的算法或数据结构。