Języki niższego poziomu, takie jak C i C ++, w rzeczywistości nie mają pojęcia tablic wielowymiarowych. (Inne niż wektory i tablice dynamiczne) Gdy tworzysz tablicę wielowymiarową za pomocą
int foo[5][10];
To właściwie tylko cukier syntaktyczny . To, co tak naprawdę robi C, to utworzenie pojedynczej ciągłej tablicy 5 * 10 elementów. To
foo[4][2]
jest także cukrem syntaktycznym. To naprawdę odnosi się do elementu w
4 * 10 + 2
lub 42 element. Ogólnie rzecz biorąc, indeks elementu [a][b]
w tablicy foo[x][y]
wynosi
a * y + b
Ta sama koncepcja dotyczy tablic 3d. Jeśli mamy foo[x][y][z]
i uzyskujemy dostęp do elementu [a][b][c]
, to naprawdę uzyskujemy dostęp do elementu:
a * y * z + b * z + c
Ta koncepcja dotyczy tablic n- wymiarowych. Jeśli mamy tablicę z wymiarami D1, D2, D3 ... Dn
i uzyskujemy dostęp do elementu, S1, S2, S3 ... Sn
formuła jest następująca
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
Wyzwanie
Musisz napisać program lub funkcję, która oblicza indeks tablicy wielowymiarowej zgodnie z powyższą formułą. Dane wejściowe będą mieć dwie tablice. Pierwsza tablica to wymiary, a druga tablica to indeksy. Długość tych dwóch tablic będzie zawsze równa i co najmniej 1.
Możesz bezpiecznie założyć, że każda liczba w tablicach będzie nieujemną liczbą całkowitą. Możesz również założyć, że nie dostaniesz się 0
do tablicy wymiarów, chociaż 0
może być w indeksach. Możesz również założyć, że indeksy nie będą większe niż wymiary.
Przetestuj 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]
.