Linguagens de nível inferior, como C e C ++, na verdade não têm conceito de matrizes multidimensionais. (Diferente de vetores e matrizes dinâmicas) Quando você cria uma matriz multidimensional com
int foo[5][10];
Na verdade, isso é apenas açúcar sintático . O que C realmente faz é criar uma única matriz contígua de 5 * 10 elementos. este
foo[4][2]
também é açúcar sintático. Isso realmente se refere ao elemento em
4 * 10 + 2
ou o 42º elemento. Em geral, o índice do elemento [a][b]
na matriz foo[x][y]
está em
a * y + b
O mesmo conceito se aplica às matrizes 3D. Se temos foo[x][y][z]
e acessamos o elemento [a][b][c]
, estamos realmente acessando o elemento:
a * y * z + b * z + c
Esse conceito se aplica a matrizes n- dimensionais. Se temos uma matriz com dimensões D1, D2, D3 ... Dn
e acessamos S1, S2, S3 ... Sn
o elemento, a fórmula é
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
O desafio
Você deve escrever um programa ou função que calcule o índice de uma matriz multidimensional de acordo com a fórmula acima. A entrada terá duas matrizes. A primeira matriz são as dimensões e a segunda matriz são os índices. O comprimento dessas duas matrizes sempre será igual e pelo menos 1.
Você pode assumir com segurança que todo número nas matrizes será um número inteiro não negativo. Você também pode assumir que não obterá um 0
na matriz de dimensões, embora um 0
possa estar nos índices. Você também pode assumir que os índices não serão maiores que as dimensões.
Teste de E / S
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]
.