从索引号中导出数字金字塔的数量

时间:2013-05-19 15:34:08

标签: java math loops

问题是这样的:

假设我有一个数字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])

每对中的第一个数字是索引,其中第二个是金字塔中的数字。

唉,我找不到明确的模式我没有运气。

2 个答案:

答案 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)