问题是这样的:
假设我有一个数字N
,其值用于创建数字金字塔。 N
= 4的数字金字塔看起来像这样:
3
2 3
1 2 3
0 1 2 3
同样地,它看起来像这样:
0
1 1
2 2 2
3 3 3 3
毋庸置疑,我想知道一种使用索引遍历每个金字塔数的方法。我正在寻找类似于:
的功能 f(i) = [number from pyramid]
其中i
是索引号。如果它只依赖于索引(即不是递归的),那将是最好的。
我试图在索引列表中查找模式,如
N=4
([0 0] [1 1] [2 1] [3 2] [4 2] [5 2] [6 3] [7 3] [8 3] [9 3])
每对中的第一个数字是索引,其中第二个是金字塔中的数字。
唉,我找不到明确的模式我没有运气。答案 0 :(得分:4)
详细阐述了叶戈尔的答案:
X
第一次出现在
sum(0<=i<=X | i) = X(X+1)/2
现在假设您有一些索引i
,那么我们首先解决好像该函数不是离散的并且最后向下舍入:
X(X+1)/2 = i <=>
X^2 + X - 2i = 0
解决这个二次方程:
X = (-1 +/- sqrt(1 + 8i)) / 2
简化,忽略否定解和舍入产生Egor给出的公式:
f(i) = floor((sqrt(8i+1)-1)/2)
答案 1 :(得分:3)
f(i) = floor((sqrt(8*i+1)-1)/2)