Untergeordnete Sprachen wie C und C ++ haben eigentlich kein Konzept für mehrdimensionale Arrays. (Andere als Vektoren und dynamische Arrays) Wenn Sie ein mehrdimensionales Array mit erstellen
int foo[5][10];
Dies ist eigentlich nur syntaktischer Zucker . Was C wirklich tut, ist, ein einzelnes zusammenhängendes Array von 5 * 10 Elementen zu erstellen . Dies
foo[4][2]
ist auch syntaktischer Zucker. Das bezieht sich wirklich auf das Element bei
4 * 10 + 2
oder das 42. Element. Im Allgemeinen ist der Index des Elements [a][b]
im Array foo[x][y]
at
a * y + b
Das gleiche Konzept gilt für 3D-Arrays. Wenn wir haben foo[x][y][z]
und auf element [a][b][c]
zugreifen, greifen wir wirklich auf element zu:
a * y * z + b * z + c
Dieses Konzept gilt für n- dimensionale Arrays. Wenn wir ein Array mit Dimensionen haben D1, D2, D3 ... Dn
und auf das Element zugreifen, S1, S2, S3 ... Sn
lautet die Formel
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
Die Herausforderung
Sie müssen ein Programm oder eine Funktion schreiben, die den Index eines mehrdimensionalen Arrays gemäß der obigen Formel berechnet. Die Eingabe erfolgt über zwei Arrays. Das erste Array sind die Dimensionen und das zweite Array sind die Indizes. Die Länge dieser beiden Arrays ist immer gleich und mindestens 1.
Sie können davon ausgehen, dass jede Zahl in den Arrays eine nicht negative Ganzzahl ist. Sie können auch davon ausgehen, dass Sie kein a 0
im Dimensionsarray erhalten, obwohl a 0
möglicherweise in den Indizes enthalten ist. Sie können auch davon ausgehen, dass die Indizes nicht größer als die Dimensionen sind.
Testen Sie 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]
.