Bahasa tingkat rendah, seperti C dan C ++ sebenarnya tidak memiliki konsep array multidimensi. (Selain vektor dan array dinamis) Saat Anda membuat array multidimensi dengan
int foo[5][10];
Ini sebenarnya hanya gula sintaksis . Apa yang sebenarnya dilakukan C adalah membuat sebuah array bersebelahan yang terdiri dari 5 * 10 elemen. Ini
foo[4][2]
juga merupakan gula sintaksis. Ini benar-benar merujuk pada elemen di
4 * 10 + 2
atau, elemen ke-42. Secara umum, indeks elemen [a][b]
dalam array foo[x][y]
berada di
a * y + b
Konsep yang sama berlaku untuk array 3d. Jika kita memiliki foo[x][y][z]
dan mengakses elemen, [a][b][c]
kita benar-benar mengakses elemen:
a * y * z + b * z + c
Konsep ini berlaku untuk n- dimensi array. Jika kita memiliki array dengan dimensi D1, D2, D3 ... Dn
dan kita mengakses elemen S1, S2, S3 ... Sn
rumusnya
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
Tantangan
Anda harus menulis program atau fungsi yang menghitung indeks array multidimensi sesuai dengan rumus di atas. Input akan menjadi dua array. Array pertama adalah dimensi, dan array kedua adalah indeks. Panjang kedua array ini akan selalu sama dan setidaknya 1.
Anda dapat dengan aman mengasumsikan bahwa setiap angka dalam array akan menjadi bilangan bulat non-negatif. Anda juga dapat mengasumsikan bahwa Anda tidak akan mendapatkan 0
dalam array dimensi, meskipun a 0
mungkin ada dalam indeks. Anda juga dapat mengasumsikan bahwa indeks tidak akan lebih besar dari dimensi.
Tes 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]
.