I linguaggi di livello inferiore, come C e C ++, in realtà non hanno alcun concetto di array multidimensionali. (Diversi da vettori e array dinamici) Quando si crea un array multidimensionale con
int foo[5][10];
Questo è in realtà solo zucchero sintattico . Quello che fa veramente C è creare un singolo array contiguo di 5 * 10 elementi. Questo
foo[4][2]
è anche zucchero sintattico. Questo si riferisce davvero all'elemento a
4 * 10 + 2
o, il 42 ° elemento. In generale, l'indice dell'elemento [a][b]
nell'array foo[x][y]
è a
a * y + b
Lo stesso concetto si applica alle matrici 3d. Se abbiamo foo[x][y][z]
e accediamo a un elemento, [a][b][c]
stiamo davvero accedendo a un elemento:
a * y * z + b * z + c
Questo concetto si applica alle matrici n- dimensionali. Se abbiamo un array con dimensioni D1, D2, D3 ... Dn
e accediamo all'elemento, S1, S2, S3 ... Sn
la formula è
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
La sfida
È necessario scrivere un programma o una funzione che calcola l'indice di un array multidimensionale secondo la formula sopra. L'input sarà di due array. Il primo array è rappresentato dalle dimensioni e il secondo array è rappresentato dagli indici. La lunghezza di questi due array sarà sempre uguale e almeno 1.
Puoi tranquillamente supporre che ogni numero negli array sarà un numero intero non negativo. Puoi anche supporre che non otterrai un 0
array nella dimensione, sebbene a 0
possa essere negli indici. Puoi anche supporre che gli indici non saranno più grandi delle dimensioni.
Test 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]
.