#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

然后验证条件:

(ab+cd)×(ab+cd)=N(ab + cd) \times (ab + cd) = N

时间复杂度分析

  • 需要遍历所有四位数,即从 1000 到 ​9999​,检查每个数是否满足雷劈数的条件。
  • 对于每个四位数,计算分割后的两部分之和并平方,操作量为常数级别 ​**O(1)**​。
  • 总体时间复杂度是 ​**O(9000)**​,即最多进行 9000 次计算,这是可以接受的。

解题思路

  1. 数字拆分​:四位数 N 可以表示为:

N=100a+10b+c+dN = 100a + 10b + c + d其中,ab 是由 ab 组成的两位数,cd 是由 cd 组成的两位数。

  1. 数学表达​:将四位数 N = abcd 拆分为前两位和后两位,得出:

ab=10a+bab=10a+b cd=10c+dcd=10c+d验证条件​:如果满足以下条件:

(ab+cd)2(ab + cd)² = N那么 N 就是一个雷劈数。

  1. 遍历​:我们可以遍历所有四位数,从 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 是一个雷劈数。

结论

通过拆分每个四位数为两部分,计算它们和的平方,再验证结果是否等于原始四位数,我们可以找出所有符合条件的雷劈数。这个问题本质上就是寻找符合特定数学条件的四位数,不需要复杂的算法或数据结构。