我需要编写一个函数来查找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
查找给定值的相邻块(顶部,左侧,右侧,底部)的公式是什么。
例如:
提前非常感谢你!
答案 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
发现,留给读者。 ;)