如何获得弗洛伊德三角形中的相邻块?

How to get the adjacent blocks in Floyd triangle?

我需要编写一个函数来查找 Floyd 三角形中的相邻块。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

查找给定值的相邻块(顶部、左侧、右侧、底部)的公式是什么。

例如:

在此先感谢您!

上行或下行所需的班次由行的标识符唯一确定。如果在给定的值中 n >= 1,你必须找到最大的整数 k 使得:

k(k+1)/2 + 1 <= n <=> k^2 + k + 2(1 - n) <= 0

这是一个二阶多项式函数:

delta = 1 - 8(1 - n) = 8n - 7 > 0
x1 = (-1 + sqrt(8n-7)) / 2 and x2 = (-1 - sqrt(8n-7)) / 2

x2 < 0 < x1 因此该行的基于 0 的标识符为:k := floor((-1 + sqrt(8n-7)) / 2).

之后:向上 n - k,向下 n + k + 1,向左 n - 1,向右 n + 1。角落案例 (leftmost/rightmost/...) 也可以用 k 发现,留给 reader。 ;)