观察上图,我们设从上到下为第 1 , 2 , 3 , … 1, 2, 3, \dots 1,2,3,… 层:
- 第一层: 1 1 1 个。
- 第二层: 1 + 2 1 + 2 1+2 个。
- 第三层: 1 + 2 + 3 1 + 2 + 3 1+2+3 个。
- … \dots …
我们发现第 k k k 层的个数应该是 1 + 2 + 3 + ⋯ + k 1 + 2 + 3 + \dots + k 1+2+3+⋯+k。
设 k , v , s k, v, s k,v,s 分别表示当前层数、当前层的个数、总个数。
那么当 s ≤ 20230610 s \leq 20230610 s≤20230610 时执行:
k += 1
v += k
s += v
当跳出循环时,表示 s > 20230610 s > 20230610 s>20230610,即第 k k k 层无法凑成,故输出 k − 1 k - 1 k−1。
- Python
import sys
sys.setrecursionlimit(1000000)
input = lambda:sys.stdin.readline().strip()
k = 1
v = 1
s = 1
while s <= 20230610:
k += 1
v += k
s += v
print(k - 1)
运行结果:
494