2

问题是这样的:

假设我有一个 number N,其值用于创建数字金字塔。= 4的数字金字塔N如下所示:

      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])

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

唉,我没有找到清晰的模式。

4

2 回答 2

4

对叶戈尔回答的详细说明:

的第一次出现X

sum(0<=i<=X | i) = X(X+1)/2

现在假设你有一些 index 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)
于 2013-05-19T16:17:44.533 回答
3
f(i) = floor((sqrt(8*i+1)-1)/2)
于 2013-05-19T15:49:30.320 回答