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 ... Dny accedemos al elemento, S1, S2, S3 ... Snla 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 0en 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].