如何在Floyd三角形中获得相邻的块?

时间:2016-09-13 11:28:54

标签: algorithm math recursion pascals-triangle triangular

我需要编写一个函数来查找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

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

例如:

  • 输入20→左输出:19,右:21,顶部:15,底部:26
  • 输入28→左输出:27,右:-1,顶部:-1,底部:35
  • 输入19→左输出:18,右:20,顶部:14,底部:25

提前非常感谢你!

1 个答案:

答案 0 :(得分:2)

上升或下降所需的变化由行的标识符唯一确定。如果给定值为n >= 1,则必须找到最大整数k,以便:{/ p>

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。角落情况(最左边/最右边/ ......)也可以用k发现,留给读者。 ;)