Java 从索引编号导出数字金字塔的编号

Java 从索引编号导出数字金字塔的编号,java,math,loops,Java,Math,Loops,问题是这样的: 3 2 3 1 2 3 0 1 2 3 0 1 1 2 2 2 3 3 3 3 假设我有一个数字N,其值用于创建一个数字金字塔。N=4的数字金字塔如下所示: 3 2 3 1 2 3 0 1 2 3 0 1 1 2 2 2 3 3 3 3 等效地,它可以如下所示: 3 2 3 1 2 3 0 1 2 3 0 1 1 2 2 2 3

问题是这样的:

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

      3
    2 3
  1 2 3
0 1 2 3
      0
    1 1
  2 2 2
3 3 3 3
等效地,它可以如下所示:

      3
    2 3
  1 2 3
0 1 2 3
      0
    1 1
  2 2 2
3 3 3 3
不用说,我想知道一种使用索引遍历金字塔中每个数字的方法。我正在寻找一个类似于:

f(i)=[金字塔中的数字]

其中
i
是索引号。如果它只依赖于索引(即,不是递归的),那么它将是最好的

我尝试在索引列表中查找一种模式,如

N=4
([0 0][11][21][32][42][52][63][73][83][93])

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


唉,我没能找到一个清晰的模式。

关于伊戈尔答案的详细说明:

f(i) = floor((sqrt(8*i+1)-1)/2)
第一次出现的
X
位于

sum(0<=i<=X | i) = X(X+1)/2
解这个二次方程:

X = (-1 +/- sqrt(1 + 8i)) / 2
简化,忽略负解并向下取整,得到Egor给出的公式:

f(i) = floor((sqrt(8i+1)-1)/2)

这个问题和CUDA有什么关系?我用这个函数作为CUDA内核的算法。基本上,这里的索引是每个内核调用的索引。如果您觉得这个问题对cuda来说过于笼统,请随意编辑标签。我所能看到的是一种昂贵的方式:(你能说明你是如何推导出这个函数的吗?
8
在某种程度上特定于
N
的值吗?啊,神奇的数字,让我想起了美国版的Office和kevin使用神奇的数字来平衡账目。@Zchpyvr-它不依赖于
N
。它是基于你的模式的二次方程的解。比谢谢你的解释!我现在能更清楚地理解这个过程了。