Los lenguajes de nivel inferior, como C y C ++, en realidad no tienen el concepto de matrices multidimensionales. (Aparte de vectores y matrices dinámicas) Cuando crea una matriz multidimensional con
int foo[5][10];
En realidad, esto es solo azúcar sintáctico . Lo que C realmente hace es crear una única matriz contigua de 5 * 10 elementos. Esta
foo[4][2]
También es azúcar sintáctico. Esto realmente se refiere al elemento en
4 * 10 + 2
o, el elemento 42. En general, el índice del elemento [a][b]
en la matriz foo[x][y]
está en
a * y + b
El mismo concepto se aplica a las matrices 3d. Si tenemos foo[x][y][z]
y accedemos al elemento [a][b][c]
, realmente estamos accediendo al elemento:
a * y * z + b * z + c
Este concepto se aplica a matrices n- dimensionales. Si tenemos una matriz con dimensiones D1, D2, D3 ... Dn
y accedemos al elemento, S1, S2, S3 ... Sn
la fórmula es
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
El reto
Debe escribir un programa o función que calcule el índice de una matriz multidimensional de acuerdo con la fórmula anterior. La entrada será de dos matrices. La primera matriz son las dimensiones, y la segunda matriz son los índices. La longitud de estas dos matrices siempre será igual y al menos 1.
Puede asumir con seguridad que cada número en las matrices será un número entero no negativo. También puede suponer que no obtendrá un 0
en la matriz de dimensiones, aunque 0
podría estar en los índices. También puede suponer que los índices no serán más grandes que las dimensiones.
Prueba 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
int[10]
.