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 ... Dne acessamos S1, S2, S3 ... Sno 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 0na 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].