题解:P12206 [蓝桥杯 2023 国 Python B] 弹珠堆放

· · 题解

观察上图,我们设从上到下为第 1, 2, 3, \dots 层:

我们发现第 k 层的个数应该是 1 + 2 + 3 + \dots + k

k, v, s 分别表示当前层数、当前层的个数、总个数。

那么当 s \leq 20230610 时执行:

k += 1
v += k
s += v

当跳出循环时,表示 s > 20230610,即第 k 层无法凑成,故输出 k - 1

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