Языки более низкого уровня, такие как C и C ++, фактически не имеют понятия многомерных массивов. (Кроме векторов и динамических массивов) При создании многомерного массива с
int foo[5][10];
Это на самом деле просто синтаксический сахар . Что на самом деле делает С, так это создает единый непрерывный массив 5 * 10 элементов. это
foo[4][2]
также синтаксический сахар. Это действительно относится к элементу в
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.
Вы можете смело предполагать, что каждое число в массивах будет неотрицательным целым числом. Вы также можете предположить, что вы не получите a 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]
.