Мови нижчого рівня, такі як C і C ++, насправді не мають поняття багатовимірних масивів. (Окрім векторів та динамічних масивів) Коли ви створюєте багатовимірний масив із
int foo[5][10];
Це насправді просто синтаксичний цукор . Що насправді робить C, це створити єдиний суміжний масив з 5 * 10 елементів. Це
foo[4][2]
також є синтаксичним цукром. Це дійсно стосується елемента at
4 * 10 + 2
або, 42-й елемент. Загалом індекс елемента [a][b]
в масиві foo[x][y]
знаходиться на рівні
a * y + b
Це ж поняття стосується і 3d-масивів. Якщо у нас є foo[x][y][z]
і ми отримуємо доступ до елемента, [a][b][c]
ми дійсно отримуємо доступ до елемента:
a * y * z + b * z + c
Ця концепція стосується n -вимірних масивів. Якщо у нас є масив з розмірами D1, D2, D3 ... Dn
і ми отримуємо доступ до елемента, S1, S2, S3 ... Sn
формула така
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
Змагання
Ви повинні написати програму або функцію, яка обчислює індекс багатовимірного масиву відповідно до вищезгаданої формули. Вхід буде двома масивами. Перший масив - це розміри, а другий масив - індекси. Довжина цих двох масивів завжди буде рівною і принаймні 1.
Можна сміливо припускати, що кожне число масивів буде невід'ємним цілим числом. Ви також можете припустити, що ви не отримаєте 0
розмірний масив, хоча це 0
може бути в індексах. Можна також припустити, що показники не будуть більшими за розміри.
Тест 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]
.