较低级的语言(例如C和C ++)实际上没有多维数组的概念。(向量和动态数组除外)使用以下方法创建多维数组时
int foo[5][10];
这实际上只是语法糖。C真正要做的是创建一个由5 * 10个元素组成的连续数组。这个
foo[4][2]
也是语法糖。这实际上是指
4 * 10 + 2
或者,第42个元素。一般地,元件的索引[a][b]
在阵列foo[x][y]
是在
a * y + b
相同的概念适用于3d阵列。如果我们有foo[x][y][z]
并且访问元素,那么[a][b][c]
我们实际上是在访问元素:
a * y * z + b * z + c
这个概念适用于n维数组。如果我们有一个具有维度的数组D1, D2, D3 ... Dn
并且我们访问元素,S1, S2, S3 ... Sn
则公式为
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
挑战
您必须编写一个程序或函数来根据上述公式计算多维数组的索引。输入将是两个数组。第一个数组是维度,第二个数组是索引。这两个数组的长度将始终相等且至少为1。
您可以安全地假定数组中的每个数字都是非负整数。您还可以假设0
尽管索引中0
可能包含a,但在维度数组中不会得到a 。您还可以假定索引不会大于维度。
测试IO
Dimensions: [5, 10]
Indices: [4, 2]
Output: 42
Dimensions: [10, 10, 4, 62, 7]
Indices: [1, 2, 3, 4, 5]
Output: 22167
Dimensions: [5, 1, 10]
Indices: [3, 0, 7]
Output: 37
Dimensions: [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
Indices: [3, 1, 5, 5, 3, 0, 5, 2, 5, 4]
Output: 33570178