C ve C ++ gibi daha düşük seviyeli diller aslında çok boyutlu diziler kavramına sahip değildir. (Vektörler ve dinamik diziler dışında) ile çok boyutlu bir dizi oluşturduğunuzda
int foo[5][10];
Bu aslında sadece sözdizimsel şeker . C'nin yaptığı şey, 5 * 10 elementli tek bir bitişik dizi oluşturmaktır . Bu
foo[4][2]
aynı zamanda sözdizimsel şekerdir. Bu gerçekten de öğeyi ifade eder
4 * 10 + 2
veya, 42. element. Genel olarak, elemanın göstergesi [a][b]
dizide foo[x][y]
olan
a * y + b
Aynı kavram 3d diziler için de geçerlidir. Eğer elimizde foo[x][y][z]
ve elemana erişirsek, [a][b][c]
elimizde gerçekten varız:
a * y * z + b * z + c
Bu kavram n boyutlu diziler için geçerlidir . Boyutları olan bir dizimiz varsa D1, D2, D3 ... Dn
ve elemana erişirsek S1, S2, S3 ... Sn
formül
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
Meydan okuma
Yukarıdaki formüle göre çok boyutlu bir dizinin indeksini hesaplayan bir program veya işlev yazmalısınız. Giriş iki dizi olacak. İlk dizi boyutlar, ikinci dizi ise dizinlerdir. Bu iki dizinin uzunluğu her zaman eşit ve en az 1 olacaktır.
Dizilerdeki her sayının negatif olmayan bir tamsayı olacağını güvenle kabul edebilirsiniz. Ayrıca , endekslerde yer 0
alsa 0
da , boyut dizisinde yer alamayacağınızı varsayabilirsiniz . Ayrıca endekslerin boyutlardan daha büyük olmayacağını da varsayabilirsiniz.
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]
.