Arrays 从数字向后映射到(i,j,k)

Arrays 从数字向后映射到(i,j,k),arrays,Arrays,我有一个3D数组arr[I][j][k]。如果我想将(I,j,k)映射到一个数字,那么我可以使用I*Ry*Rz+j*Ry+k。如果我想向后映射,即给定一个数字,我想要(I,j,k),该怎么办。我无法推导出这个公式。有人能帮忙吗? i、j、k的范围分别为0到Rx、Ry、Rz 行/列的主次顺序都可以。因为您使用的是3D数组,所以需要在O(n^3)中循环,以查找i、j和k中哪些值指向包含您正在搜索的值的内存位置 实际上,您已经用设置位置的公式证明了这一点 编辑:我误解了你的问题。我以为您想反向查找存储

我有一个
3D
数组
arr[I][j][k]
。如果我想将
(I,j,k)
映射到一个数字,那么我可以使用
I*Ry*Rz+j*Ry+k
。如果我想向后映射,即给定一个数字,我想要
(I,j,k)
,该怎么办。我无法推导出这个公式。有人能帮忙吗?
i、j、k
的范围分别为
0
Rx、Ry、Rz


行/列的主次顺序都可以。

因为您使用的是3D数组,所以需要在
O(n^3)
中循环,以查找
i
j
k
中哪些值指向包含您正在搜索的值的内存位置

实际上,您已经用设置位置的公式证明了这一点


编辑:我误解了你的问题。我以为您想反向查找存储在内存中的值,以找到它在数组中的位置。

我认为以下方法可以奏效。 假设您有number
num
和array
a[Rx][Ry][Rz]
。要获取索引
(i,j,k)
,请执行以下操作(这是针对列主顺序):

  • int商=num/(Rx*Ry)
    int余数=num%(Rx*Ry)
  • k=商
    num=余数
  • 商=num/Rx
    余数=num%Rx
  • j=商
    i=余数

最后我们得到
(i,j,k)
a[i][j][k]
将对应于给定的
num

我希望不使用循环就获得它。您不能。x维数组必须在
O(n^x)
中循环才能反向匹配。